[算法]类似n sum个数的问题(DP)

Posted 今天GaGa打代码了吗?

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[算法]类似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];
	}
}

以上是关于[算法]类似n sum个数的问题(DP)的主要内容,如果未能解决你的问题,请参考以下文章

HDU 1024 Max Sum Plus Plus --- dp+滚动数组

算法系列学习DP和滚动数组 [kuangbin带你飞]专题十二 基础DP1 A - Max Sum Plus Plus

bzoj3209 花神的数论题——数位dp

DP | Luogu P1466 集合 Subset Sums

TYVJ 1305 最大子序和 题解 单调队列优化DP

USACO 2.2Subset Sums (DP)