经典入门_贪心算法

Posted 山本夏木

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了经典入门_贪心算法相关的知识,希望对你有一定的参考价值。

贪心是一种总是选择“当前最好选择”,而不从整体上去把握的思想,往往这种“贪心”的策略能得到接近最优的结果,甚至某些情况下就是最优解。

例2.11 FatMouse‘Trade(1433)

题目大意如下:有n元钱,m种物品;每种物品有j磅,总价值f元,可以使用0到f的任意价格购买相应磅的物品,例如使用0.3f元,可以购买0.3j磅物品。要求输出用m元钱最多能买到多少磅物品。

样例输入:
5 3
7 2
4 3
5 2
20 3
25 18
24 15
15 10
-1 -1
样例输出:
13.333
31.500
#include<stdio.h>
#include<algorithm>
using namespace std;
struct goods{
    double j;
    double f;
    double s;//性价比 
    bool operator <(const goods &A)const{
        return s>A.s;
    }
}buf[1000];
int main(){
    int n,m;
    while(scanf("%d%d",&n,&m)!=EOF){
        if(n==-1&&m==-1) break;
        for(int i=1;i<=m;i++){
            scanf("%lf%lf",&buf[i].j,&buf[i].f);
            buf[i].s=buf[i].j/buf[i].f;//价格除以钱 
        }
        sort(buf+1,buf+1+m);
        double res=0;//累计重量 
        double quo=0;//
        for(int i=1;i<=m;i++){
            if(n>=buf[i].f){
                res+=buf[i].j;
                n-=buf[i].f;
            }
            else{
                quo=n/buf[i].f;
                res+=quo*buf[i].j;
                break; 
            }
        }
        printf("%.3lf\n",res);//保留三位小数 
    }
    return 0;
}

 

例2.12 今年暑假不AC (1434)

这道题的贪心策略并不是很明显,但有了思路也很简单,就懒得敲了,直接po一个链接:http://blog.csdn.net/lecholin/article/details/65979763

以上是关于经典入门_贪心算法的主要内容,如果未能解决你的问题,请参考以下文章

算法竞赛入门经典_4.3_递归

算法竞赛入门经典_2_变量及其输入

《入门经典》——6.26

-经典入门-贪心例题自解

算法竞赛入门经典_3.1_数组_逆序输出_开灯问题

《算法竞赛入门经典》3.3最长回文子串