HDU1009(贪心+水题)

FatMouse' Trade

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 32188    Accepted Submission(s): 10394


Problem Description
FatMouse prepared M pounds of cat food, ready to trade with the cats guarding the warehouse containing his favorite food, JavaBean.
The warehouse has N rooms. The i-th room contains J[i] pounds of JavaBeans and requires F[i] pounds of cat food. FatMouse does not have to trade for all the JavaBeans in the room, instead, he may get J[i]* a% pounds of JavaBeans if he pays F[i]* a% pounds of cat food. Here a is a real number. Now he is assigning this homework to you: tell him the maximum amount of JavaBeans he can obtain.
 

Input
The input consists of multiple test cases. Each test case begins with a line containing two non-negative integers M and N. Then N lines follow, each contains two non-negative integers J[i] and F[i] respectively. The last test case is followed by two -1's. All integers are not greater than 1000.
 

Output
For each test case, print in a single line a real number accurate up to 3 decimal places, which is the maximum amount of JavaBeans that FatMouse can obtain.
 

Sample Input
   
   
   
   
5 3 7 2 4 3 5 2 20 3 25 18 24 15 15 10 -1 -1
 

Sample Output
   
   
   
   
13.333 31.500
 
 
//贪心+水题

#include<iostream> #include<algorithm> using namespace std; const double MSM=1e-20; const int MAX=1000+10;

struct node {  int j,f;  double por; }per[MAX];

bool cmp(node a,node b) {  return a.por>=b.por; }

int main() {  int n,i,m;  double ans;  while(~scanf("%d%d",&m,&n)&&!(-1==m&&-1==n))  {   for(i=0;i<n;i++)   {    scanf("%d%d",&per[i].j,&per[i].f);    per[i].por=1.0*per[i].j/per[i].f;   }

  sort(per,per+n,cmp);   double tmp=1.0*m;   i=0;   ans=0;   while(i<n)   {   // printf("%.3lf    ",ans);    if(tmp>=per[i].f)    {     ans+=per[i].j;     tmp-=per[i].f;    }    else    {     ans+=per[i].j*(tmp/per[i].f);     //ans+=per[i].por*tmp;     //tmp=0;     break;    }    i++;   }

  printf("%.3lf\n",ans);  }  return 0; }

你可能感兴趣的:(贪心)