题目描述
题目分析
动态规划组成部分一:确定状态
动态规划组成部分二:转移方程
动态规划组成部分三:初始条件和边界情况
动态规划组成部分四:计算顺序
Java代码实现
public int kSum(int[] A, int K, int target) {
int len = A.length;
int[][][] f = new int[len + 1][K + 1][target + 1];
f[0][0][0] = 1;
for (int i = 1; i <= len; i++)
for (int k = 0; k <= K; k++)
for (int s = 0; s <= target; s++) {
f[i][k][s] += f[i - 1][k][s];
if ((s >= A[i - 1]) && (k > 0))
f[i][k][s] += f[i - 1][k - 1][s - A[i - 1]];
}
return f[len][K][target];
}