题目:小明有n元钱,全部用来买书,书的价格有10,20,50,100元的,求买书的方案一共有多少。
解题思路:这个题是完全背包的问题,用a数组存买书的方案数,a[0]初始化为1然后用完全背包思路解题即可。
细节处理:判断n是否能整出10,如果可以再继续算买书的种数,如果不能整除10或者为0,则钱不可能全部用来买书,输出0。
代码:#include<bits/stdc++.h>
using namespace std;
int main()
{ int i,j,n,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;
}
感想:考虑问题要全面,如此题一定要把n=0的情况考虑进去。