洛谷 B3636:硬币问题 ← 动态规划

【题目来源】
https://www.luogu.com.cn/problem/B3635/

【题目描述】
今有面值为
1、5、11 元的硬币各无限枚。
要凑出 n 元,问需要的最少硬币数量。

【输入格式】
仅一行,一个正整数 n。

【输出格式】
仅一行,一个正整数,表示需要的硬币个数。

【数据范围】
对于 100% 的数据, 保证 n≤
10^6

【输入样例1】
15

【输出样例1】
3

【输入样例2】
12

【输出样例2】
2

【算法分析】
● 最少硬币问题能否使用贪心法,跟硬币的面值有关。
在给定的硬币面值中,若任一面值的硬币,大于比它面值小的硬币的面值和,便可以使用贪心法
● 本题的硬币面值 1、5、11 符合使用贪心法的条件。但本题解没有使用贪心法,而使用了动态规划算法。
● 动态规划之最后一步法:
https://blog.csdn.net/hnjzsyjyj/article/details/112797538

【算法代码】

#include 
using namespace std;

const int maxn=1e6+5;
int f[maxn];
int c[]= {1,5,11};
int n;

int main() {
    cin>>n;
    for(int i=0; i<=n; i++) f[i]=INT_MAX;

    f[0]=0;
    for(int j=0; j<3; j++) {
        for(int i=c[j]; i<=n; i++) {
            f[i]=min(f[i],f[i-c[j]]+1);
        }
    }
    cout<



【参考文献】
https://www.luogu.com.cn/problem/solution/B3635

 

你可能感兴趣的:(信息学竞赛,#,动态规划,数据结构,动态规划)