ZOJ 2109 FatMouse' Trade

来源:互联网 发布:java重载函数 编辑:程序博客网 时间:2024/05/21 07:33

简单的贪心,按照J[i]和F[i]的比列从大到小排序,然后计算和,注意M和F[i]为0的情况

#include <iostream>#include <cstdio>#include <memory.h>#include <algorithm>#define INF 1000000000using namespace std;const int maxn=1010;struct node{int f,j;double ratio;node(int jj=0,int ff=0):f(ff),j(jj){if(ff==0)ratio=INF;else ratio=(double)jj/ff;}bool operator<(const node &rhs)const{return ratio>rhs.ratio;}}rooms[maxn];int M,N;int main(){while (scanf("%d%d",&M,&N)==2){if(M==-1&&N==-1)break;double ans=0;for (int i=0;i<N;++i){int f,j;scanf("%d%d",&j,&f);rooms[i]=node(j,f);}sort(rooms,rooms+N);for (int i=0;i<N;++i){if(rooms[i].f==0){ans+=rooms[i].j;}else{int cnt=0;if(M<rooms[i].f)cnt=M,M=0;else cnt=rooms[i].f,M-=rooms[i].f;ans+=((double)cnt/rooms[i].f)*rooms[i].j;}}printf("%.3lf\n",ans);}return 0;}


原创粉丝点击