Algorithm 动态规划的Leetcode目标和

Algorithm 动态规划的Leetcode目标和,algorithm,Algorithm,给定n和目标,求[1,2,…,n]和目标的数字组合数。数字可以重复选取(1+1+2=4),但是组合不能重复({1,1,2}和{1,2,1}被视为一个组合)。e、 g n=2,target=4:{1,1,1,1},{1,1,2},{1,3},{2,2},所以返回4 由于我们只需要返回组合的数量,我们使用动态规划如下: int sum(int n, int target) { vector<int> dp(target + 1); dp[0] = 1; for (

给定n和目标,求[1,2,…,n]和目标的数字组合数。数字可以重复选取(1+1+2=4),但是组合不能重复({1,1,2}和{1,2,1}被视为一个组合)。e、 g

n=2,target=4:{1,1,1,1},{1,1,2},{1,3},{2,2},所以返回4

由于我们只需要返回组合的数量,我们使用动态规划如下:

int sum(int n, int target) {
    vector<int> dp(target + 1);
    dp[0] = 1;
    for (int i = 1; i <= target; ++i) {
        for (int j = 1; j <= n; j++) {
            if (i >= j) dp[i] += dp[i - j];
        }
    }
    return dp.back();
}
int和(int n,int目标){
向量dp(目标+1);
dp[0]=1;
对于(inti=1;i简单修改

  for (int j = 1; j <= n; j++) {
        for (int i = j; i <= target; i++) {
            dp[i] += dp[i - j];
        }
    }
for(int j=1;j简单修改

  for (int j = 1; j <= n; j++) {
        for (int i = j; i <= target; i++) {
            dp[i] += dp[i - j];
        }
    }
for(int j=1;j