【問題描述】
給你乙個n種面值的貨幣系統,求組成面值為m的貨幣有多少種方案。
【輸入】
第一行輸入兩個正整數n和m,用空格隔開,分別表示貨幣系統的面值種數和要組成的總面值。
以下n行,每行輸入乙個正整數,表示貨幣系統的面值。
【輸出】
一行乙個數,表示組成目標面值的方案總數。
【輸入輸出樣例】
money.in
money.out
3 10
【資料範圍】
對於100%的資料,n<=100,m<=10000。
乍眼一看:
揹包問題的方案總數
對於乙個給定了揹包容量、物品費用、物品間相互關係(分組,依賴)的揹包問題,除了再給定每個物品的價值後求可得到的最大值以外,還可以得到裝滿揹包或將揹包裝置某一容量的方案總數(這道題就是這樣)。
對於這類改變問法的問題,一般只需要將轉移方程中的max改成sum即可。
例如若每件物品均是01揹包中的物品,轉移方程即為f[i][v]=sum,初始條件f[0][0]=1;
事實上,這樣做可行的原因在於狀態轉移方程已經考慮了所有可能的揹包組成方案。
對於這道 貨幣系統:
設f[j]表示面值為j的最大方案數,如果f[j-k*a[i]]!=0,則f[j]=f[j]+f[j-k*a[i]],當1<=i<=n,m>=j>=a[i],1<=k<=j/a[i]。
程式
#include#includeusing
namespace
std;
int a[10001
],n,m;
long
long f[10005
];//注意long long
intmain()
f[0]=1
;
for(int i=1;i<=n;i++)
for(int j=m;j>=a[i];j--)//f[j]表示面值為j的方案最優解。
for(int k=1;k<=j/a[i];k++)
f[j]+=f[j-k*a[i]];
cout
}
貨幣系統設計 c
一 需求分析 1 系統描述 該系統功能主要是可以為使用者提高快捷有效的服務,為使用者完成貨幣之間的一些基本運算 比如幣值統計,不同貨幣之間的等價兌換,還有貨幣的統計計算,便利於賬目管理 本系統為使用者設計了四種貨幣之間的轉換,人民幣 美元 英鎊 日元,使用者可以再這四種貨幣的範疇內進行一些基本的運算...
貨幣系統問題
時間限制 1 sec 記憶體限制 64 mb 提交 85 解決 59 提交 狀態 討論版 命題人 admin 貨幣是在國家或經濟體內的物資與服務交換中充當等價物,或是償還債務的特殊商品,是用作交易媒介 儲藏價值和記賬單位的一種工具。魔法世界的貨幣的歷史,可以追溯至史前以物易物的階段,後來經過金屬貨幣...
1192 貨幣系統
給你乙個n種面值的貨幣系統,求組成面值為m的貨幣有多少種方案。樣例 設n 3,m 10,要求輸入和輸出的格式如下 第一行兩個整數n,m m 5000 以下n行,每行乙個整數,第i 1行為第i種貨幣的面值 乙個整數,為方案數 3 1012 510動態規劃 揹包問題 n,m map int,input ...