貨幣系統題解 【揹包問題DP】
阿新 • • 發佈:2021-01-27
技術標籤:2021寒假每日一題c++演算法動態規劃
文章目錄
貨幣系統
給定 V 種貨幣(單位:元),每種貨幣使用的次數不限。
不同種類的貨幣,面值可能是相同的。
現在,要你用這 V 種貨幣湊出 N 元錢,請問共有多少種不同的湊法。
輸入格式
第一行包含兩個整數 V 和 N。
接下來的若干行,將一共輸出 V 個整數,每個整數表示一種貨幣的面值。
輸出格式
輸出一個整數,表示所求總方案數。
資料範圍
1≤V≤25,
1≤N≤10000
答案保證在long long範圍內。
輸入樣例:
3 10
1 2 5
輸出樣例:
10
分析
這題是個比較經典的完全揹包問題,比較簡單我們就直接貼程式碼吧程式碼
#include<iostream>
#include<algorithm>
#include<string>
using namespace std;
const int N = 10010, M = 30;
int dp[N][M];
int w[N];
int n, m;
int main() {
cin >> n >> m;
for (int i = 1; i <= n; i++) {
cin >> w[i];
}
dp[0][0] = 1;//從前0個數中選總價值為0的方案為1種
for (int i = 1; i <= n; i++) {
for (int j = 0; j <= m; j++) {
dp[i][j] = dp[i - 1][j];
if (j >= w[i])dp[i][j] += dp[i][j - w[i]];
}
}
cout << dp[n][m] << endl;
return 0;
}