zoukankan      html  css  js  c++  java
  • 【HDU 1009】FatMouse' Trade

    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
    题意:给你m克猫粮,n个房间分别可以用猫粮以J[i]/F[i]的比例换取至多J[i]克咖啡豆,问最多能换取多少咖啡豆
    分析:先排下序再贪心
    #include <stdio.h>
    #include <algorithm>
    using namespace std;
    int n,u;
    double m,ans;
    struct room
    {
        double j,f,p;
    } r[1005];
    int cmp(room a,room b)
    {
        return a.p>b.p;
    }
    int main()
    {
        while(scanf("%lf%d",&m,&n)&&n!=-1&&m!=-1)
        {
            for(int i=0;i<n;i++)
            scanf("%lf%lf",&r[i].j,&r[i].f),
                  r[i].p=r[i].j/r[i].f;
            sort(r,r+n,cmp);
            u=ans=0;
            while(m&&u<n)
            {
                if(r[u].f>m) ans+=m*r[u].p,m=0;
    //剩下的猫粮不够把这个房间的咖啡豆换过来,那就能换多少换多少
                else ans+=r[u].j,m-=r[u].f;
    //够的话,这间房子全部咖啡豆换过来
                u++;
            }
    //        while(m>=r[u].f&&u<n) //换种写法
    //        {
    //            ans+=r[u].j;
    //            m-=r[u].f;
    //            u++;
    //        }
    //        if(u!=n) ans+=m*r[u].p;
            printf("%.3lf
    ",ans);
    
        }
        return 0;
    }
     
  • 相关阅读:
    iOS的生命周期
    【iOS开发】在 App 中加入 AdMob 广告
    iOS性能优化:Instruments
    动态的计算行高 加载数据源 有多少显示多少 tableView 包含 colloctionView 显示复杂的界面写法
    Java String.split()注意点
    Java eclipse export jar包 包括第三方引入的jar
    微信网页授权获取用户基本信息
    android连接本地tomcat服务器,报timeout
    iOS内存管理retain,assign,copy,strong,weak
    static与全局与局部变量的区别
  • 原文地址:https://www.cnblogs.com/flipped/p/5183271.html
Copyright © 2011-2022 走看看