hdu 1009 FatMouse' Trade

xiaoxiao2021-02-27  213

题目来源:HDU 1009

简单题目分析: 小老鼠有M磅猫食,猫监管着若干存储javabean的仓库,小老鼠所要做的就是用猫食来和它们交易,每个仓库有J磅javabean,与此对应的是,小老鼠要用F磅猫食来交换这J磅javabean,值得一提的是,老鼠并不一定要兑换某个仓库内的全部javabean,而是可以兑换一部分(两者依旧成线性关系,J*a%磅javabean需要F*a%磅猫食来交换),问小老鼠最多能交换到多少磅javabean。 思路: 简单的贪心,每次先交换J/F比值最大(意味着单位磅猫食能换到最多javabean)的仓库即可,实现方法:sort结构体排序。 #include <iostream> #include <stdio.h> #include <algorithm> #include <queue> #include <string.h> #include <stack> using namespace std; struct whouse { int J; int F; double rate; }; bool cmp(whouse a,whouse b) { return a.rate>b.rate; //按比值排序 } int main() { int M,N; while( ~scanf("%d %d",&M,&N) && M!=-1 && N!=-1 ) { double maxsum=0; whouse temp[N]; int i; for(i=0;i<N;++i) { scanf("%d %d",&temp[i].J,&temp[i].F); temp[i].rate=(double)temp[i].J/temp[i].F; } sort(temp,temp+N,cmp); for(i=0;i<N;++i) { if(M>=temp[i].F) { maxsum+=temp[i].J; M-=temp[i].F; } else { maxsum+=M*temp[i].rate; break; } } printf("%.3lf\n",maxsum); } return 0; }
转载请注明原文地址: https://www.6miu.com/read-10313.html

最新回复(0)