I'm interested in a discrete max-convolution problem, which is to compute $$r(c) = \max_{x | x \ge 0, \sum_k x_k = c} \left[ \sum_{k=1} f_k(x_k) \right] $$ for all values $c=0, \ldots, C$, where $x=(x_1, \ldots, x_k)$ is a vector of non-negative integers.
If we assume that $f_k$ are all concave functions i.e., $f(i+1) - f(i) \le f(i) - f(i-1)$, how efficiently can $r = (r(0), \ldots, r(C))$ be computed?
Follow-up: what if $J$ of the $f_k$ functions are not concave?