Hdoj Title Address: Portal
Fatmouse ' TradeTime limit:2000/1000 MS (java/others) Memory limit:65536/32768 K (java/others)
Total Submission (s): 67028 Accepted Submission (s): 22794
Problem Descriptionfatmouse prepared M pounds of cat food, ready-to-trade with the cats guarding the warehouse containing He favorite food, JavaBean.
The warehouse has N rooms. The i-th contains j[i] pounds of JavaBeans and requires f[i] pounds of cat food. Fatmouse does not has the to trade for all the JavaBeans in the the the same, instead, he may get j[i]* a% of pounds JavaBeans if he Pays f[i]* a% pounds of cat food. Here A is a real number. Now he's assigning this homework to you:tell him the maximum amount of JavaBeans he can obtain.
Inputthe input consists of multiple test cases. Each test case is begins with a line containing the non-negative integers M and N. Then N lines follow, each contains, non-negative integers j[i] and f[i] respectively. The last test case was followed by Two-1 ' s. All integers is not greater than 1000.
Outputfor each test case, print in a single line a real number accurate up to 3 decimal places, which is the maximum Amoun T of JavaBeans that Fatmouse can obtain.
Sample Input
5 37 24 35 220 325 1824 1515 10-1-1
Sample Output
13.33331.500
#include <iostream> #include <cstring> #include <cstdio> #include <algorithm>using namespace std;struct node{ int J; int F;} Node[1100];bool CMP (node A,node b) { return 1.0*a.j/a.f>1.0*b.j/b.f;} int main () { int m,n; while (scanf ("%d%d", &m,&n) &&m!=-1&&n!=-1) { double result=0.0,java=m-0.0; int temp=0; while (temp<n) { scanf ("%d%d", &node[temp]. J,&node[temp]. F); temp++; } Sort (node,node+n,cmp); for (int i=0;i<n;i++) { if (java>node[i]. F) { result+=node[i]. J; Java-=node[i]. F; } else{ result+= (Node[i]. j* (Java/node[i]. F)); break; } } printf ("%.3lf\n", result);} }
acm--cat rat Deal--hdoj 1009--fatmouse ' trade--greedy