zoukankan      html  css  js  c++  java
  • HDU1009_FatMouse' Trade【贪心】【水题】

    FatMouse' Trade


    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
    Total Submission(s): 44470    Accepted Submission(s): 14872

    Problem 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
     
    Author
    CHEN, Yue
     
    Source

    ZJCPC2004

    题目大意:有N个房间,每一个房间存有FatMouse喜欢吃的食物。可是每一个房间

    的食物都须要用对应的猫粮去换。

    FatMouse 有M磅的猫粮,为它最多能换到多

    少的食物。

    思路:贪心方法。用结构体存每间房间的食物量和所需猫粮量。

    按食物的单位价格(

    即食物/猫粮的大小)进行排列,每次选单位价格最小的购买,知道M磅猫粮用完

    #include<stdio.h>
    #include<string.h>
    #include<algorithm>
    using namespace std;
    struct warehouse
    {
        double j;
        double f;
    }a[1100];
    bool cmp(warehouse a,warehouse b)
    {
        return a.f/a.g < b.f/b.g;
    }
    int main()
    {
        int N;
        double M;
        while(~scanf("%lf%d",&M,&N)&& (M!=-1||N!=-1))
        {
            memset(a,0,sizeof(a));
            for(int i = 0; i < N; i++)
            {
                scanf("%lf%lf",&a[i].j,&a[i].f);
            }
            sort(a,a+N,cmp);
            double sum = 0;
            for(int i = 0; i < N; i++)
            {
                if(M <= 0.000001)
                    break;
                if(M >= a[i].f)
                {
                    sum += a[i].j;
                    M -= a[i].f;
                }
                else
                {
                    sum += M*a[i].j/a[i].f;
                    M = 0;
                }
            }
            printf("%.3lf
    ",sum);
        }
        return 0;
    }
    


  • 相关阅读:
    Two strings CodeForces
    Dasha and Photos CodeForces
    Largest Beautiful Number CodeForces
    Timetable CodeForces
    Financiers Game CodeForces
    AC日记——整理药名 openjudge 1.7 15
    AC日记——大小写字母互换 openjudge 1.7 14
    AC日记——将字符串中的小写字母换成大写字母 openjudge 1.7 13
    AC日记——加密的病历单 openjudge 1.7 12
    AC日记——潜伏着 openjudge 1.7 11
  • 原文地址:https://www.cnblogs.com/yangykaifa/p/6837578.html
Copyright © 2011-2022 走看看