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

    题目链接:HDU1009

         题目是一道简单的贪心问题,但是一点需要注意:
    

    排序kase[i].j/kase[i].f的时候需要考虑kase[i].f为0的情况,也就是说代价为0,此时比值应该为无穷大,但是j,f二者皆为double型变量,比值在f极小的情况下也可以接近无穷大,如果置j=0时比值为一个很大的值如 1e9,也不能满足条件。故考虑将j=0单独拿出来考虑,仅对j!=0的情况进行贪心。

    代码:
    
    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    #include<cstdlib>
    using namespace std;
    
    #define INF 1e50
    #define maxn 1000
    struct warehouse
    {
        double f,j,unit_price;
    }Kase[maxn];
    
    bool  cmp(warehouse x,warehouse y)
    {
        if(x.unit_price>=y.unit_price) return true;
        else return false;
    }
    
    int main()
    {
        double m;int n;
        while(scanf("%lf%d",&m,&n))
        {
            if(m==-1&&n==-1)break;
            double sum=0;
            int i,k;
            for(k=i=0;i<n;i++)
               {
                   scanf("%lf%lf",&Kase[k].j,&Kase[k].f);
                   if(Kase[k].j){Kase[k].unit_price=Kase[k].j/Kase[k].f;k++;}
                   else {sum+=Kase[k].j;}
               }
               sort(Kase,Kase+k,cmp);
               double left=m;
               for(int i=0;i<k;i++)
              {
                 if(left>=Kase[i].f)
                 {
                     left-=Kase[i].f;
                     sum+=Kase[i].j;
                  }
                  else
                  {
                      sum+=(double)left/Kase[i].f*Kase[i].j;
                      left=0;break;
                  }
              }
               printf("%.3lf
    ",sum);
        }
    }
    
    
  • 相关阅读:
    sql server日志已满报错
    图片基础信息
    android小细节
    内存泄露分析
    一个非常快的android模拟器
    activity退出
    ListView中内容的动画效果
    视频相关android软件
    Android Screen Monitor抓取真机屏幕
    ListView中使用type需要注意的东西
  • 原文地址:https://www.cnblogs.com/Wu-Shi/p/5410067.html
Copyright © 2011-2022 走看看