HDU 1009 FatMouse' Trade
来源:互联网 发布:bot的知识图谱数据api 编辑:程序博客网 时间:2024/06/16 13:36
题目链接: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 1000struct 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\n",sum); }}
0 0
- HDU 1009 FatMouse' Trade
- hdu 1009 FatMouse' Trade
- hdu 1009 FatMouse' Trade
- HDU 1009 - FatMouse' Trade
- HDU-1009 FatMouse' Trade
- hdu 1009 FatMouse' Trade
- HDU 1009 FatMouse' Trade
- HDU 1009 FatMouse' Trade
- HDU 1009 FatMouse' Trade
- HDU 1009 FatMouse' Trade
- HDU 1009 FatMouse' Trade
- HDU 1009 FatMouse' Trade
- hdu 1009 FatMouse' Trade
- HDU 1009 FatMouse' Trade
- HDU--1009--FatMouse' Trade
- hdu 1009 FatMouse' Trade
- hdu 1009 FatMouse' Trade
- HDU-1009 FatMouse' Trade
- leetcode笔记:Sum Root to Leaf Numbers
- GDI+之验证码
- 怎样搭高质量的Android项目框架,框架的结构具体描述?
- 1035. 插入与归并(25)
- C语言位运算
- HDU 1009 FatMouse' Trade
- APK反编译二次打包实例-消除apk底部广告
- fields must be fully assigned before control is returned to the caller解决方案
- oc基础之分类与协议(五)
- [leetcode151] Reverse Words in a String
- 1017. A除以B (20)
- 代理模式
- 简单的Java入门代码
- SQLServer2008/2005 生成数据字典SQL语句