小蒜手里有 n元钱全部用来买书,书的价格为 10 元,20 元,50 元,100 元。
问小蒜有多少种买书方案?(每种书可购买多本)
输入格式
一个整数 nn,代表总共钱数。(1 \le n \le 10001≤n≤1000)
输出格式
一个整数,代表选择方案种数。
输出时每行末尾的多余空格,不影响答案正确性
样例输入1
20
样例输出1
2
样例输入2
15
样例输出2
0
题意:
给出可以买到书的价格,和买书的钱,问用所给钱可以买到书的方案数一共有多少种?
解题思路:
定义
dp[j]为当前容量为j可以有dp[j]种方案;
初始化:
dp[0]=1;容量为0就不需要放书;
状态转移方程;
dp[j]=dp[j]+dp[j-s[i]];
容量为j拥有的方案数加上放进s[i]后的方案数
Accept Code:
#include <stdio.h>
int s[6]={10,20,50,100};
int dp[1005];
int main()
{
int n,i,j,m;
scanf("%d", &n);
dp[0]=1;
for(i=0; i<4; i++)
for(j=s[i]; j<=n; j++)//枚举容量从10开始到n的
dp[j]+=dp[j-s[i]];
printf("%d\n", dp[n]);
return 0;
}