http://ac.nbutoj.com/Problem/view.xhtml?id=1482
- 问题描述
-
大白菜带着套套去超市买好吃的,到了付钱的时候,收银员告诉大白菜需要付N元。
大白菜突然想知道自己付钱有多少种方法,求助我们聪明的ACMER来告诉他,有几种付钱的方法。
(已知,我天朝有,红色老人头,绿色老人头,黄色老人头 (100,50,20,10,5,1 )等等,ps:当大白菜带着套套的时候,他将化身无敌大款,各种老人头要多少有多少);
- 输入
-
输入的N都是整数(N<=1000)
- 输出
-
对于每个输入,请给出大白菜付钱的方法数
- 样例输入
-
1 5 10
- 样例输出
-
124
由于每种钱可以取多张,完全背包的题目
#include <stdio.h> #include <algorithm> #include <string.h> using namespace std; int main() { int n,i,j; int a[6] = {1,5,10,20,50,100},dp[100000]; while(~scanf("%d",&n)) { if(!n) { printf("0\n"); continue; } memset(dp,0,sizeof(dp)); dp[0] = 1; for(i = 0;i<6;i++) { for(j = a[i];j<=n;j++) { dp[j]+=dp[j-a[i]]; } } printf("%d\n",dp[n]); } return 0; }