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

posted @ 2013-07-20 10:16  crazy_apple  阅读(220)  评论(0编辑  收藏  举报