zoukankan      html  css  js  c++  java
  • 贪心算法

    --------------------- 
    作者:LoisLuo666 
    来源:CSDN 
    原文:https://blog.csdn.net/LoisLuo666/article/details/79560332 

    贪心算法:贪心法顾名思义就是不断贪心的选取当前最优策略的计算方法。

    下面介绍几种贪心问题

    问题一:货币选择问题

    问题描述:分别有1,5,10,50,100元,分别有5,2,2,3,5张纸币。问若要支付k元,则需要多少张纸币?

    问题分析:

    我们只需要遵循“优先使用面值大的硬币”即可。

    1.尽可能多的使用100元(即最大的);

    2.余下部分尽可能多的使用50元;

    3.余下部分尽可能多的使用10元;

    4.余下部分尽可能多的使用5元;

    5.余下部分使用1元;

    #include <iostream>
    #include <algorithm>
    using namespace std;
     
    const int N=5;   
    int Money[N]={5,2,2,3,5};  
    int Value[N]={1,5,10,50,100};  
     
    int solve(int money){
        int num=0;
        for(int i=N-1;i>0;i--){
            //c为使用纸币的张数,在需要用面值为vaule[i]的张数和已有张数里选取最小的;
            int c=min(money/Value[i],Money[i]);
            money=money-Value[i]*c;        
            num+=c;
        }
        if(money>0){
            num=-1;        
        }
        return num;
    }
    int main(){
        int money;
        cin>>money;//输入一共需要支付多少钱
        int res=solve(money);
        if(res!=-1){
            cout<<res<<endl;
        }else{
            cout<<"no"<<endl;
        }
        return 0;
     
    }
     

     

    第二题:

    #include <stdio.h>
    #include <iostream>
    #include <algorithm>
     
    using namespace std;
    //输入
    const int n = 5;
    int S[n]={1,2,4,6,8};
    int T[n]={3,5,7,9,10};
     
    pair<int, int> itv[n];//对工作排序的pair数组
    int solve()
    {
        //对pair进行字典序比较
        //为了让结束时间早的工作排在前面,把T存入first,把S存入second
        for(int i=0;i<n;i++){
            itv[i].first=S[i];
            itv[i].second=T[i];
        }
        int cnt=0,t=0;
        for(int i=0;i<n;i++){
            if(t<=itv[i].first){
                cnt++;
                t=itv[i].second;
            }
        }
        return cnt;
    }
     
    int main() {
        int k=solve();
        cout << k<< endl;
        return 0;
    }

    第三题:

    #include<string>
    #include<iostream>
    using namespace std;
    int main()
    {
        //输入
    
        string S="ACDBCB";    
        string res;
        int a=0,b=S.size()-1;
        while(a<=b){
            if(S[a]<S[b]){
                res.push_back(S[a]);
                a++;
            }else{
                res.push_back(S[b]);
                b--;
            }
        }
        cout<<res<<endl;    
        return 0;
    }
  • 相关阅读:
    下载并使用ASP.NET MVC v1.0 Futures
    关于DataGridView的数据源两个值得注意的小问题
    C++网络编程(二)客户端服务器程序
    C++多态、继承的简单分析
    XML文件解析器TXml
    数组
    CTS类型系统
    光阴不会虚度
    软件的大规模生产
    微创新和山寨的关系
  • 原文地址:https://www.cnblogs.com/joelwang/p/10635650.html
Copyright © 2011-2022 走看看