题目描述
分析
按动态规划的分析步骤分析的话,代码是不难写出来的,但是写出来后你就会发现,结果不对,多出了很多组合:
解决方法:
什么都不用改,直接把两个循环调换即可。。
代码如下:
#include<bits/stdc++.h>
using namespace std;
int change(int amount, vector<int>& coins) {
int n = coins.size();
vector<int> dp(amount+1, 0);
dp[0] = 1;
//int result = 0;
for(int i = 0; i < n; i++){
for(int j = 1; j <= amount; j++){
if(j < coins[i]){
continue;
}else{
if(dp[j - coins[i]] > 0){
dp[j] += dp[j - coins[i]];
}
}
// if(dp[j] == amount){
// result++;
// }
}
}
for(int i = 0; i <= amount; i++){
cout<<dp[i]<" ";
}
cout<<endl;
return dp[amount];
}
int main(){
int amount,n;
cin>>amount>>n;
vector<int> coins;
int num;
for(int i = 0; i < n; i++){
cin>>num;
coins.push_back(num);
}
cout<<change(amount, coins);
return 0;
}
标签:vector,int,coins,随想录,II,零钱,amount,num,dp
From: https://www.cnblogs.com/satsuki26681534/p/18090379