宣传一下算法提高课整理 <—
CSDN个人主页:更好的阅读体验 <—
本题链接(AcWing)
点这里
题目描述
小明手里有n元钱全部用来买书,书的价格为10元,20元,50元,100元。
问小明有多少种买书方案?(每种书可购买多本)
输入格式
一个整数 n,代表总共钱数。
输出格式
一个整数,代表选择方案种数。
数据范围
$0 \le n \le 1000$
输入样例:
20
输出样例:
2
思路
本题为DP问题,可以使用闫氏DP分析法解题。
DP【完全背包求方案数】:
- 将总钱数 $n$ 看作背包容量
- 四种价格即为 $4$ 种价格为 $10,20,50,100$ 的物品
- 状态计算:
······$f[0] \leftarrow 1$
······$f[j] \leftarrow f[j - v]$
$AC$ $Code$:
$C++$
#include <iostream>
using namespace std;
const int N = 1010;
int n = 4, m;
int f[N];
int v[] = {10, 20, 50, 100};
int main()
{
cin >> m;
f[0] = 1;
for (int i = 0; i < n; i ++ )
for (int j = v[i]; j <= m; j ++ )
f[j] += f[j - v[i]];
cout << f[m] << endl;
return 0;
}
最后,如果觉得对您有帮助的话,点个赞再走吧!