算法篇 - 贪心算法

2020-06-17  本文已影响0人  交大小丑

一、贪心算法简介:

贪心子结构是独立的(往往用标志判断而已),不同于动态规划(后面每一边的计算要用到前一步的值,另外开辟空间来保存)

二 、贪心算法与数组

例题:

货币选择问题
#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 <tchar.h>
#include <queue>
#include "iostream"
 
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];
    }
    sort(itv, itv + n);
 
    int count = 0;//选取的结果
    int t = 0;  //最后所选工作的结束时间
    for(int i = 0; i < n; i ++) {
        if(t < itv[i].first) {
            count ++;
            t = itv[i].second;
        }
    }
    return count;
}
 
int main() {
    int k=solve();
    cout << k<< endl;
    return 0;
}

问题三:字典序最小问题

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
using namespace std;
int main()
{
    //输入
    int n=6;
    char S[7]="ACDBCB"; 
    int a=0,b=n-1;
    while(a<=b){
        
        bool left=false;
        //把从左起和从右起的字符串比较
        for(int i=0;a+i<=b;i++){
            if(S[a+i]<S[b-i]){
                left=true;
                break;
            }else if(S[a+i]>S[b-i]){
                left=false;
                break;
            }
        }
        //左右两边谁大输出谁
        if(left) putchar(S[a++]);
        else putchar(S[b--]);
    }
        
    return 0;
}

https://zhuanlan.zhihu.com/p/145482023

上一篇 下一篇

猜你喜欢

热点阅读