fork download
  1. #include<bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. struct knap{
  6. int object;
  7. double pbw;
  8. };
  9.  
  10. bool comparepbw(knap n1,knap n2)
  11. {
  12.  
  13. if(n1.pbw > n2.pbw) return true;
  14. else return false;
  15. }
  16.  
  17. int main()
  18. {
  19. int n, m;
  20. cin >> n >> m;
  21. int profit[n];
  22. int weight[n];
  23. for(int i = 0; i< n; i++)
  24. cin >> profit[i];
  25. for(int i = 0; i< n; i++)
  26. cin >> weight[i];
  27.  
  28. knap sack[n];
  29. for(int i = 0; i< n; i++)
  30. {
  31.  
  32. sack[i].object = i;
  33. sack[i].pbw = double(profit[i])/double(weight[i]);
  34. }
  35.  
  36. sort(sack,sack+n,comparepbw);
  37.  
  38. int rw = m;
  39. double x[n];
  40. memset(x,0.0,sizeof(x));// sob lola array valu gola ke 0 korbe
  41. int i = 0;
  42. while (rw>0)
  43. {
  44.  
  45. if(rw>= weight[sack[i].object])
  46. {
  47.  
  48. x[sack[i].object] = 1;
  49. rw = rw-weight[sack[i].object];
  50. i++;
  51. }
  52. else
  53. {
  54. x[sack[i].object]= double(rw)/double(weight[sack[i].object]);
  55. rw = 0;
  56. }
  57. }
  58.  
  59. for(int i =0; i< n;i++)
  60. {
  61.  
  62. cout << x[i] << " ";
  63. }
  64.  
  65. double maxprofit = 0;
  66. for(int i =0; i<n;i++)
  67. {
  68.  
  69. maxprofit= maxprofit+(x[i]*double(profit[i]));
  70. }
  71. cout << endl << maxprofit << endl;
  72.  
  73. return 0;
  74. }
  75.  
Success #stdin #stdout 0s 5312KB
stdin
7 15
10 5 15 7 6 18 3
2 3 5 7 1 4 1
stdout
1 0.666667 1 0 1 1 1 
55.3333