5 37 24 35 220 325 1824 1515 10-1 -1 Sample Output13.33331.500 AuthorCHEN, Yue 题目描述就是一只老鼠有M份猫粮,这里有N个房间(就是N行数据),每个房间里都有J【i】份老鼠想要的食物 和 诱惑猫需要的猫粮 F[i],所以问你这只老鼠最多能够得到多少它想要的食物,每个房间的食物可以不拿完,他给猫的猫粮和猫需要的比例*房间有的J[i]的数量就是老鼠最后可以得到的。解题思路算出每个房间的比值,比值越大就说明越值得啊,排序之后比较即可。#include<stdio.h>#include<string.h>#include<algorithm>using namespace std;struct node{ int aa,bb; double jun;}shu[10000];bool cmp(node a,node b){ return a.jun>b.jun;}int main(){ int M,N; while(scanf("%d%d",&M,&N)!=EOF){ if(M==-1&&N==-1) break; for(int i=0;i<N;i++){ int a,b; scanf("%d%d",&a,&b); double d=(double)a/b; shu[i].aa=a; shu[i].bb=b; shu[i].jun=d; } sort(shu,shu+N,cmp); //for(int i=0;i<N;i++) // printf("%lf ",s[i]); int dang=0; double ans=0.0; for(int i=0;i<N;i++){ if(dang+shu[i].bb<=M){ ans+=shu[i].aa; dang+=shu[i].bb; } else { ans+=((double)(M-dang)/shu[i].bb)*shu[i].aa; break ; } } printf("%.3lf/n",ans); } return 0;}
新闻热点
疑难解答