-
总时间限制:
- 1000ms 内存限制:
- 65536kB
-
描述
-
小明手里有n元钱全部用来买书,书的价格为10元,20元,50
元,100元。 问小明有多少种买书方案?(每种书可购买多本)
输入
- 一个整数 n,代表总共钱数。(0 <= n <= 1000) 输出
- 一个整数,代表选择方案种数 样例输入
-
样例输入1:20样例输入2:15样例输入3:0
样例输出
-
样例输出1:2样例输出2:0样例输出3:0
题目分析
用n元钱买不同价格的书,各有数种,问一共有多少种买书方案
解题思路
读完题目可以看出来,肯定是背包问题,n元钱买书,书的个数也没有限制,所以可判断是完全背包的问题
源代码
#include<bits/stdc++.h>
using namespace std;int main()
{
int n,i,j,a[1001]={0},b[4]={10,20,50,100};
cin>>n;
a[0]=1;
if(n%10!=0||n==0)
cout<<0<<endl;
else
{
for(i=0;i<4;++i)
for(j=10;j<=n;j+=10)
{
if(j-b[i]>=0)
a[j]+=a[j-b[i]];
}
cout<<a[n]<<endl;
}
return 0;
}
拿一个一维数组去存储对应下标对应方案数,输出最后一个,就是最大的方案数