1. 程式人生 > >P1474 貨幣系統 Money Systems(完全背包)(大水題)

P1474 貨幣系統 Money Systems(完全背包)(大水題)

code pre 輸入輸出格式 col 選擇 sca 描述 ac代碼 數量

題目描述

母牛們不但創建了它們自己的政府而且選擇了建立了自己的貨幣系統。由於它們特殊的思考方式,它們對貨幣的數值感到好奇。

傳統地,一個貨幣系統是由1,5,10,20 或 25,50, 和 100的單位面值組成的。

母牛想知道有多少種不同的方法來用貨幣系統中的貨幣來構造一個確定的數值。

舉例來說, 使用一個貨幣系統 {1,2,5,10,...}產生 18單位面值的一些可能的方法是:18x1, 9x2, 8x2+2x1, 3x5+2+1,等等其它。 寫一個程序來計算有多少種方法用給定的貨幣系統來構造一定數量的面值。保證總數將會適合long long (C/C++) 和 Int64 (Free Pascal),即在0 到2^63-1之間。

輸入輸出格式

輸入格式:

貨幣系統中貨幣的種類數目是 V (1<=V<=25)。要構造的數量錢是 N (1<= N<=10,000)。

第一行: 二個整數,V 和 N 。

第二行: 可用的貨幣的面值 。

輸出格式:

輸出格式:

單獨的一行包含那個可能的用這v種硬幣湊足n單位貨幣的方案數。

輸入輸出樣例

輸入樣例#1: 復制
3 10
1 2 5
輸出樣例#1: 復制
10



我好菜啊。第一眼覺得是個完全背包的模板。啊啊啊啊,自己硬生生的改成多重背包!!!!!n^3啊。傻逼了。

廢話不多說ac代碼如下:
#include<cstdio>
#define
ll long long ll dp[10020]; int w[10020]; int main() { int n, v; scanf("%d%d", &n, &v); for (int i = 1; i <= n; ++i) scanf("%d", &w[i]); dp[0] = 1; for (int i = 1; i <= n;++i) for (int j = w[i]; j <= v; ++j) dp[j] += dp[j - w[i]]; printf("%lld\n
", dp[v]); }

P1474 貨幣系統 Money Systems(完全背包)(大水題)