• 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驱动爱好者 服务器程序员沟通交流
    如果觉得不错,欢迎点赞,你的鼓励就是我的动力
    阿里打赏 微信打赏
  • 相关阅读:
    layui动态修改select的选中项
    layui 鼠标悬停单元格显示全部
    使用LayUI操作数据表格
    layer.msg 弹出不同的效果的样式
    layer父页面刷新
    layui 获取radio单选框选中的值
    使用Dapper.Contrib
    微信公众号的文章爬取有三种方式
    centos的 各种安装包下载位置
    git pull一直弹出vim编辑器
  • 原文地址:https://www.cnblogs.com/itdef/p/15587708.html
Copyright © 2020-2023  润新知