• [算法]类似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];
    	}
    }
    
    
  • 相关阅读:
    树:二叉树
    树:红黑树
    gtest
    VDB R&D
    QML 从入门到放弃
    json parse
    Effective C++ 笔记
    Samples topic
    C++ 11 snippets , 2
    C++ 11 snippets , 1
  • 原文地址:https://www.cnblogs.com/coding-gaga/p/13382953.html
Copyright © 2020-2023  润新知