• 经典入门_贪心算法


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

    例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
    ",res);//保留三位小数 
        }
        return 0;
    }

    例2.12 今年暑假不AC (1434)

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

  • 相关阅读:
    junit spring
    DFU协议介绍
    USB枚举过程
    触摸板单点描述符
    Linux下使用codeblocks交叉编译ARM-LINUX-GCC程序
    树莓派 原理图 摄像头接口定义
    usb描述符详细讲解
    常用的算法思想
    STM32f407 DCMI方式驱动 OV2640
    linux echo命令-转
  • 原文地址:https://www.cnblogs.com/exciting/p/8411987.html
Copyright © 2020-2023  润新知