1. 程式人生 > 其它 >貨幣系統題解 【揹包問題DP】

貨幣系統題解 【揹包問題DP】

技術標籤: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; }

執行結果

在這裡插入圖片描述