AcWing 1371. 货币系统
原题链接
简单
作者:
自豪的澡巾QAQ
,
2021-02-16 16:44:35
,
所有人可见
,
阅读 276
#include<iostream>
#include<algorithm>
using namespace std;
const int N = 1e5 + 5;
long long dp[N];//dp[i]表示凑出面值为i的总额的方案数
int main() {
int nums,goal;//nums表示各种面值的硬币数,goal表示目标面值
cin >> nums >> goal;
dp[0] = 1;//凑出面值为0就是什么都不选,只有一种方案
for (int i = 1;i <= nums;i++) {
int money;
cin >> money;
for (int j = money;j <= goal;j++) {
/*每当给出一种面额为money的硬币,dp[i](i < money)仍然是不变的;
而i > money时,dp[i] = dp[i] (不考虑新给出的硬币时的方案数)
+ dp[i - money] (使用一张面值为money的硬币 + 面值为i - money的硬币的方案数)
*/
dp[j] += dp[j - money];
}
}
cout << dp[goal] << endl;
return 0;
}