noj [1482] 嘛~付钱吧!(完全背包)
http://ac.nbutoj.com/Problem/view.xhtml?id=1482
-
[1482] 嘛~付钱吧!
- 时间限制: 1000 ms 内存限制: 65535 K
- 问题描述
-
大白菜带着套套去超市买好吃的,到了付钱的时候,收银员告诉大白菜需要付N元。
大白菜突然想知道自己付钱有多少种方法,求助我们聪明的ACMER来告诉他,有几种付钱的方法。
(已知,我天朝有,红色老人头,绿色老人头,黄色老人头(100,50,20,10,5,1)等等,ps:当大白菜带着套套的时候,他将化身无敌大款,各种老人头要多少有多少); - 输入
-
输入的N都是整数(N<=1000)
- 输出
-
对于每个输入,请给出大白菜付钱的方法数
- 样例输入
-
1 5 10
- 样例输出
-
1 2 4
- 完全背包不解释:
-
1 #include <iostream> 2 #include <stdio.h> 3 #include <math.h> 4 #include <string.h> 5 #include <vector> 6 7 using namespace std; 8 9 int f[1010]; 10 11 int main() 12 { 13 int w[]={1,5,10,20,50,100}; 14 int n; 15 memset(f,0,sizeof(f)); 16 f[0]=1; 17 int i,j; 18 for(i=0;i<6;i++) 19 { 20 for(j=w[i];j<=1000;j++) 21 { 22 if(f[j-w[i]]!=0) 23 { 24 f[j]+=f[j-w[i]]; 25 } 26 } 27 } 28 f[0]=0; 29 while(~scanf("%d",&n)) 30 { 31 printf("%d\n",f[n]); 32 } 33 return 0; 34 }
最后记得将f[0]=0,不然WA