码迷,mamicode.com
首页 > 编程语言 > 详细

经典入门_贪心算法

时间:2018-02-04 11:09:29      阅读:174      评论:0      收藏:0      [点我收藏+]

标签:break   策略   ++   style   scan   ==   tor   clu   pac   

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

例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

经典入门_贪心算法

标签:break   策略   ++   style   scan   ==   tor   clu   pac   

原文地址:https://www.cnblogs.com/exciting/p/8411987.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!