zoukankan      html  css  js  c++  java
  • 206. 硬币问题 II(挑战程序设计竞赛)

    地址 https://www.papamelon.com/problem/206

    解法
    硬币选择贪心方案,假设有两种解答方案 贪心解和非贪心解
    1 非贪心和贪心解 都有解法的情况
    由于 贪心是优先选择小于等于总需求面值的最大面值硬币, 它是用的硬币数量是G枚硬币
    非贪心有解 但是他选择小于等于总需求面值的最大面值硬币数目是小于或者等于贪心选择的数目, 那么他最后使用的硬币数量也是大于等于G的
    也就是非贪心的解可能是最优解 也可能不是最优解

    2 有没可能存在非贪心有解 贪心误解的情况
    不可能 这是由于硬币面值决定的。任意一个硬币来说,它能被它左边的任意一个硬币面值整除。 也就是多个小硬币的累加值如果等于大硬币的值,就可以转化成选择大硬币,减少最后的选择硬币数目(贪心). 每个非贪心的解都可以转化成贪心解

    3 非贪心无解 贪心无解的情况
    不可能 题目规定肯定有解

    4 非贪心无解 贪心有解 不谈论,那肯定贪心是最优解

    上面 1 2 3 一定有解 且贪心解一定优于或者等于非贪心解。 所以贪心解在保证有解的情况 一定最优.

    #include <iostream>
    #include <memory.h>
    
    using namespace std;
    
    int val[6] = {1,5,10,50,100,500};
    int arr[6];
    int n,t;
    
    int main(){
        cin>>t;
        while(t--){
            memset(arr,0,sizeof arr);
            for(int i = 0;i < 6;i++) cin >> arr[i];
            cin >> n;
            int ans =0;
           
            for(int i = 5;i>=0;i--){
                if(arr[i] !=0){
                    int cost = min(arr[i], n/val[i]);
                    n-= cost*val[i];
                    ans+=cost;
                }
                 
            }    
            cout << ans<<endl;
        }
        
    
        return 0;
    }
    
    

    我的视频题解空间

    作 者: itdef
    欢迎转帖 请保持文本完整并注明出处
    技术博客 http://www.cnblogs.com/itdef/
    B站算法视频题解
    https://space.bilibili.com/18508846
    qq 151435887
    gitee https://gitee.com/def/
    欢迎c c++ 算法爱好者 windows驱动爱好者 服务器程序员沟通交流
    如果觉得不错,欢迎点赞,你的鼓励就是我的动力
    阿里打赏 微信打赏
  • 相关阅读:
    springboot跨域解决
    python实现LRUCache
    oracle整库统计库表数据量--存储过程
    oracle整库统计库表各个字段数据最大长度--存储过程
    mysql数据库初始化脚本分组批量执行
    maven profile 的作用
    配置中包含maven属性,在idea中本地启动无法正常获取配置
    个人随笔
    Java接口interface field及method
    如何将.net core项目部署到IIS上?
  • 原文地址:https://www.cnblogs.com/itdef/p/15587708.html
Copyright © 2011-2022 走看看