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