zoukankan      html  css  js  c++  java
  • hdu 1009 贪心基础题

    B - 贪心 基础

    Crawling in process... Crawling failed Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u

    Submit Status

    Description

    FatMouse prepared M pounds of cat food, ready to trade with the cats guarding the warehouse containing his favorite food, JavaBean.
    The warehouse has N rooms. The i-th room contains J[i] pounds of JavaBeans and requires F[i] pounds of cat food. FatMouse does not have to trade for all the JavaBeans in the room, instead, he may get J[i]* a% pounds of JavaBeans if he pays F[i]* a% pounds of cat food. Here a is a real number. Now he is assigning this homework to you: tell him the maximum amount of JavaBeans he can obtain.
     

    Input

    The input consists of multiple test cases. Each test case begins with a line containing two non-negative integers M and N. Then N lines follow, each contains two non-negative integers J[i] and F[i] respectively. The last test case is followed by two -1's. All integers are not greater than 1000.
     

    Output

    For each test case, print in a single line a real number accurate up to 3 decimal places, which is the maximum amount of JavaBeans that FatMouse can obtain.
     

    Sample Input

    5 3 7 2 4 3 5 2 20 3 25 18 24 15 15 10 -1 -1
     

    Sample Output

    13.333 31.500
    题目大意:老鼠贿赂猫,要偷吃东西,付出F[i]的猫粮可以吃到J[i]的javabean,同时每一个仓库里面的东西不一定全要,
    你可以要任意百分比的东西,同时付出相应百分比的代价,问怎么选才能使老鼠吃到的javabean最多。
    思路分析:首先区别于背包问题,背包问题中每一个物品是不能够拆分的,这也是为什么背包问题不能够贪心解决的原因,
    用贪心做这道题,很显然,付出最少的代价得到最多的回报的策略是我们应该选择的,因为可以选择任意百分比,也就是说
    最后的钱肯定可以花光,本道题的贪心策略就是选择性价比最高的物品优先购买,即value/cost值最大,以这个为标准从大
    到小排序,每次把都选择性价比最高的仓库,就构成了正确答案。
    代码:
    #include <iostream>
    #include <algorithm>
    #include <cstdio>
    #include <cstring>
    #include <stack>
    #include <queue>
    using namespace std;
    struct nod
    {
        double c;
        double v;
        double s;
    };
    const int maxn=1000+10;
    nod java[maxn];
    bool cmp(nod a,nod b)
    {
        return a.s>b.s;
    }
    int main()
    {
        int  n,i;
        double m,k;
        while(scanf("%lf%d",&m,&n)&&(m!=-1||n!=-1))
        {
            double k=0;
            for(int i=0;i<n;i++)
            { scanf("%lf%lf",&java[i].v,&java[i].c);
               java[i].s=java[i].v/java[i].c;
            }
            sort(java,java+n,cmp);
         for( i=0;i<=n-1;i++)
         {
             if(m>=java[i].c)
             {
                 m-=java[i].c;
                 k+=java[i].v;
             }
             else
             {
                 k+=(double)m/java[i].c*java[i].v;
                 break;
             }
         }
         printf("%.3lf ",k);
        }
        return 0;
    }
  • 相关阅读:
    Kubernetes基础
    docker概述
    mongoDB概述
    springcloud-stream为什么被引入
    springcloud-bus+config实现动态刷新定点通知
    springcloud-bus+config实现动态刷新全局广播配置
    springcloud-bus是什么
    springcloud-动态刷新之手动版
    springcloud-服务读取Config配置中心
    springcloud-Config配置中心搭建
  • 原文地址:https://www.cnblogs.com/xuejianye/p/5433735.html
Copyright © 2011-2022 走看看