zoukankan      html  css  js  c++  java
  • 0/1背包问题-最少硬币

    简单说下题目:

    给定n中硬币,分别是1.5.10.25.50,求给定任一金额所用的最少硬币组合

    做题思路:

    先用最小的硬币来把所有金额填充(注意这个金额题目会有限制),然后再依次增大硬币的金额,来更新所用的硬币数量

    代码:

    #include <bits/stdc++.h>
    
    using namespace std;
    
    int money[5] = {1,5,10,25,50};
    int dp[300];
    //求每个金额对应的最少硬币数量 
    
    void solve(){
        for(int i = 0;i < 251; i++)
            dp[i] = INT_MAX; 
        dp[0] = 0;
        for(int i = 0;i < 5; i++){
            for(int j = money[i];j < 251; j++){
                dp[j] = min(dp[j],dp[j-money[i]]+1);
            }
        }
    } 
    
    int main()
    {
        int n;
        solve();
        while(cin>>n){
            cout<<dp[n]<<endl;
        }
        return 0;
    }
  • 相关阅读:
    第二次结对作业
    第一次结对作业
    第二次个人编程
    第一次编程作业
    第一篇随笔
    个人总结
    第三次个人作业
    第二次结对作业
    第一次结对作业
    第二次编程
  • 原文地址:https://www.cnblogs.com/jingshixin/p/12304124.html
Copyright © 2011-2022 走看看