母牛們不但建立了它們自己的**而且選擇了建立了自己的貨幣系統。由於它們特殊的思考方式,它們對貨幣的數值感到好奇。
傳統地,乙個貨幣系統是由1,5,10,20 或 25,50, 和 100的單位面值組成的。
母牛想知道有多少種不同的方法來用貨幣系統中的貨幣來構造乙個確定的數值。
舉例來說, 使用乙個貨幣系統 產生 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 101 2 5
輸出樣例#1:
10
翻譯來自nocow
usaco 2.3
這是乙個裸完全揹包問題,
雖然題解裡寫的都是一維的,但完全揹包其實可以用二維去寫。。
動態轉移方程:
dp[i][j]=dp[i-1][j]+dp[i][j-a[i]];(j>=a[i])
dp[i][j]=dp[i-1][j];(j
初始化:
dp[i][0]=1
但是二維的不論是在空間還是在**複雜度上都劣於一維,但略微易懂。
注意開long long !!!!!!!!!!!!!!!!!
1 #include2 #include3 #include4 #include5 #include6#define lli long long int
7using
namespace
std;
8const lli maxn=10001;9
void read(lli &n)
1014
while(c>='
0'&&c<='9'
)15
16 flag==1?n=-x:n=x;17}
18 lli dp[31][10001
];19
lli v,n;
20 lli a[30
];21
intmain()
2231
for(lli i=1;i<=v;i++)
32for(lli j=1;j<=n;j++)
33if(j>=a[i])
34 dp[i][j]=dp[i-1][j]+dp[i][j-a[i]];
35else
36 dp[i][j]=dp[i-1
][j];
37 printf("
%lld
",dp[v][n]);
38return0;
39 }
P1474 貨幣系統 Money Systems
題面傳送門 說實話,在做這道題的時候真的沒想到dpdp dp 因為不怎麼會 想到貪心,遞推什麼的。後來一看,o v n o vn o vn 差不多的複雜度,於是寫了個dpdp dp。打了個板子,額 居然rere re了 不知道是板子錯了還是打掛了 考試時只得了70 7070 分。include us...
P5020 貨幣系統
在的國度中共有 n種不同面額的貨幣,第 i種貨幣的面額為 a i 你可以假設每一種貨幣都有無窮多張。為了方便,我們把貨幣種數為 n 面額陣列為a 1.n 的貨幣系統記作 n,a 在乙個完善的貨幣系統中,每乙個非負整數的金額 x都應該可以被表示出,即對每乙個非負整數 x,都存在 n 個非負整數 t i...
P5020 貨幣系統
在的國度中共有 n 種不同面額的貨幣,第 i 種貨幣的面額為a i 你可以假設每一種貨幣都有無窮多張。為了方便,我們把貨幣種數為 n 面額陣列為 a 1.n 的貨幣系統記作 n,a 在乙個完善的貨幣系統中,每乙個非負整數的金額 x 都應該可以被表示出,即對每乙個非負整數 x,都存在 n 個非負整數 ...