YX Hangzhou Electric oj 1008

FatMouse' Trade

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


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
AC codes + detailed explanation:

    
    
  1. # The include <iostream> // greedy
  2. # The include <cstdio> // title meaning: FatMouse mice exchange their favorite food with a m g cat food and cat food like mice but in many warehouses and warehouses of each exchange rate is not the same, but the exchange rate for each J [i] g cat against F [i] food (i is the number of layers)
  3. #include<cstring>
  4. const int MAX= 10001;
  5. int J[MAX];
  6. int F[MAX];
  7. double p[MAX];
  8. using namespace std;
  9. int main()
  10. {
  11. int n,m,i,j;
  12. double sum;
  13. while( cin>>m>>n&&(m!= -1&&n!= -1))
  14. {
  15. for(i= 1;i<=n;i++)
  16. {
  17. cin>>J[i]>>F[i];
  18. P [I] = Double (J [I]) / F. [I]; // each exchange rates
  19. }
  20. sum= 0;
  21. the while (m! = 0 && n-! = 0 ) // 0 or food is out of the loop when the cat 0
  22. {
  23. int k;
  24. double Max= -1;
  25. for (I = . 1 ; I <= n-; I ++) // each selected to be a rate of the maximum number of layers (room)
  26. {
  27. if(p[i]>Max)
  28. {
  29. Max=p[i];
  30. k=i;
  31. }
  32. }
  33. IF (mF of [K]> = 0 ) // if there is remaining cat food or just
  34. {
  35. = F. M- [K]; // needed subtracting cat
  36. + J = SUM [K]; // add to the food exchange
  37. P [K] = 0 ; // layer against the exchange rate that is over 0 - no
  38. }
  39. the else // If the cat is not enough, use the rest of the cat food all to exchange food
  40. {
  41. + P = SUM [K] * m; // All food exchange
  42. = m 0 ; // make the cat food is 0, the redemption is completed - out of the loop
  43. }
  44. }
  45. the printf ( "% .3lf \ n-" , SUM); // Output
  46. }
  47. return 0;
  48. }


 
Reprinted from (https://blog.csdn.net/ecjtu_yuweiwei/article/details/9427885)
Released two original articles · won praise 1 · views 239

Guess you like

Origin blog.csdn.net/qq_44301515/article/details/96872913