【动态规划DP:纸币硬币专题】P2834 纸币问题 3
P2834 纸币问题 3
https://www.luogu.com.cn/problem/P2834
难度:普及-
参考代码:
#include <bits/stdc++.h>
using namespace std;const int MOD = 1e9 + 7;int main() {int n, w;cin >> n >> w;vector<int> a(n+1);for (int i = 1; i <= n; i++) {cin >> a[i];}// dp[i]表示凑出金额i的方式数量vector<long long> dp(w + 1, 0);dp[0] = 1; // 凑出金额0只有1种方式:不使用任何纸币for (int i = 1; i <= n; i++) {// 如果当前硬币面额不大于要凑的金额for (int j = a[i]; j <= w; j++) { // 累加使用这枚硬币的方式数量dp[j] = (dp[j] + dp[j - a[i]]) % MOD; }}cout << dp[w] << endl;return 0;
}