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

    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

    #include <iostream>  //很简单的一道贪心,不知道为什么会错那么多次,搞不懂
    #include <algorithm>
    #include <cstdio>
    #include <string.h>
    #include <queue>
    #include <stdlib.h>
    using namespace
     std;
    typedef struct
     node
    {

        int
     j;
        int
     f;
        double
     d;
    }
    MC;
    MC a[1003];
    bool
     cmp(MC a,MC b)
    {

        return
     a.d>b.d;
    }

    int
     main()
    {
           int n,m,i;
        double
     t;
        while
    (scanf("%d%d",&n,&m))
        {
      if(n==-1&&m==-1)
              break
    ;
            for
    (i=0;i<m;i++)
              {

                  scanf("%d%d",&a[i].j,&a[i].f);
                  a[i].d=1.0*a[i].j/a[i].f;
              }

            sort(a,a+m,cmp);
            t=0;
            for
    (i=0;i<m;i++)
            {

               if
    (n>a[i].f)
               {

                   t+=a[i].j;
                   n-=a[i].f;
               }

               else

                 {
    t+=n*a[i].d;break;}//老是在这出问题、郁闷---现在明白了,有当m=0时的情况,

                                      //所以这个不能写在循环外面。
            }

           printf("%.3lf\n",t);
        }

        return
     0;//现在明白了,此题的变态之处在于,m和f可以为0,伤人呀!sort居然可以排序分母为零的,强悍!!!
    }

                                                                     -------江财小子

  • 相关阅读:
    eclipse下c/cpp " undefined reference to " or "launch failed binary not found"问题
    blockdev 设置文件预读大小
    宝宝语录
    CentOS修改主机名(hostname)
    subprocess报No such file or directory
    用ldap方式访问AD域的的错误解释
    英特尔的VTd技术是什么?
    This virtual machine requires the VMware keyboard support driver which is not installed
    Linux内核的文件预读详细详解
    UNP总结 Chapter 26~29 线程、IP选项、原始套接字、数据链路访问
  • 原文地址:https://www.cnblogs.com/372465774y/p/2421653.html
Copyright © 2011-2022 走看看