[算法]类似n sum个数的问题(DP)
题目
求和为target的数组元素组合数,含重复。
例:
输入
arr = { 1, 2, 3, 3, 4 } ,target = 6
输出 4
题解
dp[i][j]代表到数组第i-1个元素,目标和为j的组合数。
代码
package DP;
public class TargetSumCnt {
public static void main(String args[]) {
int[] arr = { 1, 2, 3, 3, 4 };
int target = 6;
int ans = targetSumCnt(arr, target);
System.out.print(ans);
}
private static int targetSumCnt(int[] arr, int target) {
int len = arr.length;
int[][] dp = new int[len + 1][target + 1];// 到第i个元素(从1计),和为target的组合个数
dp[0][0] = 1;
for (int i = 1; i <= len; ++i) {
for (int j = 0; j <= target; ++j) {
if (arr[i - 1] > j) {
dp[i][j] = dp[i - 1][j];
} else {
dp[i][j] = dp[i - 1][j] + dp[i - 1][j - arr[i - 1]];
}
}
}
return dp[len][target];
}
}
posted on 2020-07-26 23:27 coding_gaga 阅读(218) 评论(0) 编辑 收藏 举报