您的位置:首页 > 其它

动态规划 18题

2017-04-17 12:48 211 查看

18:买书

描述
小明手里有n元钱全部用来买书,书的价格为10元,20元,50元,100元。

问小明有多少种买书方案?(每种书可购买多本)

输入一个整数 n,代表总共钱数。(0 <= n <= 1000)输出一个整数,代表选择方案种数样例输入
样例输入1:20样例输入2:15样例输入3:0

样例输出
样例输出1:2样例输出2:0样例输出3:0


2.解题思路:


这道题为完全背包问题,可以用一个数组表示对应下标的方案种类数,再用一个数组储存不同的面值,然后相加。3.代码:

#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
int n;
int w[5],f[1005];
int main()
{
while (cin>>n)
{
if (n==0)
cout<<"0"<<endl;
else
{
w[1]=10; w[2]=20; w[3]=50; w[4]=100;
memset(f,128,sizeof(f));
f[0]=1;
for (int i=1;i<=4;i++)
for (int j=0;j<=n;j++)
if (j-w[i]>=0)
if (f[j]<0) f[j]=f[j-w[i]];
else f[j]+=f[j-w[i]];
if (f[n]<0)
cout<<"0"<<endl;
else
cout<<f[n]<<endl;
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: