Codeup 貨幣系統(完全揹包問題)
21869: 貨幣系統
題目描述
母牛們不但建立了他們自己的政府而且選擇了建立了自己的貨幣系統。
[In their own rebellious way],,他們對貨幣的數值感到好奇。
傳統地,一個貨幣系統是由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)。
輸入
輸入包含多組測試資料
貨幣系統中貨幣的種類數目是 V 。 (1<= V<=25)
要構造的數量錢是 N 。 (1<= N<=10,000)
第 1 行: | 二整數, V 和 N |
第 2 ..V+1行: | 可用的貨幣 V 個整數 (每行一個 每行沒有其它的數)。 |
輸出
單獨的一行包含那個可能的構造的方案數。
樣例輸入
3 10 1 2 5
樣例輸出
10
上述問題是一個典型的完全揹包問題,注意:
- 輸出的答案可能會超出int的範圍,因此要設成long long的形式。
- 狀態轉移方程不再是簡單的取大取小了
#include <stdio.h>
int money[28];
long long dp[10005];
#define INF 0x3fffffff
int min(int a,int b)
{
return (a<b)?a:b;
}
int main()
{
int V,N;
while(scanf("%d %d",&V,&N)!=EOF)
{
int i,j;
for(i=1;i<=V;i++) scanf("%d",&money[i]);
for(i=0;i<=N;i++) dp[i]=0;
dp[0]=1;
for(i=1;i<=V;i++)
{
for(j=money[i];j<=N;j++)
{
dp[j]=dp[j]+dp[j-money[i]];
}
}
printf("%lld\n",dp[N]);
}
return 0;
}
相關文章
- 揹包問題(01揹包與完全揹包)
- 從【零錢兌換】問題看01揹包和完全揹包問題
- 揹包DP——完全揹包
- 分組揹包、完全揹包
- 01揹包、完全揹包、多重揹包詳解
- 揹包問題
- 圖解二維完全揹包問題——降維打擊圖解
- ACM 揹包問題ACM
- 01揹包問題
- dp-完全揹包
- 揹包問題大合集
- javascript演算法基礎之01揹包,完全揹包,多重揹包實現JavaScript演算法
- JavaScript中揹包問題(面試題)JavaScript面試題
- 揹包問題例題總結
- JavaScript 揹包問題詳解JavaScript
- 揹包問題解題方法總結
- 01揹包問題的解決
- 揹包問題----動態規劃動態規劃
- 【動態規劃】揹包問題動態規劃
- Java實現-揹包問題IJava
- Java實現-揹包問題IIJava
- Java實現-揹包問題VIJava
- 揹包問題的演算法演算法
- chapter12-2-揹包問題APT
- 二維費用揹包問題
- 【程式碼隨想錄】完全揹包
- 揹包問題的一道經典問題
- 動態規劃 01揹包問題動態規劃
- 【動態規劃】01揹包問題動態規劃
- 【leetcode】揹包問題彙總LeetCode
- 動態規劃-01揹包問題動態規劃
- 動態規劃篇——揹包問題動態規劃
- 動態規劃--01揹包問題動態規劃
- 【動態規劃】01揹包問題【續】動態規劃
- 【演算法】0-1揹包問題演算法
- 演算法-動態規劃-完全揹包演算法動態規劃
- leetcode題解(0-1揹包問題)LeetCode
- 基礎揹包問題的一些題目!!