码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2020-07-27 09:39:35      阅读:79      评论:0      收藏:0      [点我收藏+]

标签:gets   else   void   数组元素   for   ret   code   输出   turn   

题目

求和为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)

标签:gets   else   void   数组元素   for   ret   code   输出   turn   

原文地址:https://www.cnblogs.com/coding-gaga/p/13382953.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!