fork download
  1. #include <iostream>
  2. #include <vector>
  3. #include <algorithm>
  4.  
  5. using namespace std;
  6. struct E{
  7. int a,b;
  8. bool operator<(const E& e1)const{
  9. if(a!=e1.a)return a<e1.a;
  10. return b<e1.b;
  11. }
  12. };
  13. vector<E> vs;
  14.  
  15. int f(int n1,int m1,int k1,int sum1){
  16. if(n1==0 || m1==0 || k1==0){
  17. return sum1+m1;
  18. }
  19. int res1=0;
  20. int res2=0;
  21. if(n1>0 && k1>0){
  22. int d1=min(vs[n1].b,m1);
  23. res1=f(n1-1,m1-d1,k1-1,sum1+d1*vs[n1].a);
  24. }
  25. res2=f(n1-1,m1,k1,sum1);
  26. return max(res1,res2);
  27. }
  28.  
  29. int main() {
  30. int n,m,k;
  31. cin>>n>>m>>k;
  32. vector<int> vsa;
  33.  
  34. for(int i=0;i<n;i++){
  35. int x;
  36. cin>>x;
  37. vsa.push_back(x);
  38. }
  39. E e;
  40. vs.push_back(e);
  41. for(int i=0;i<n;i++){
  42. E e1;
  43. e1.a=vsa[i];
  44. cin>>e1.b;
  45. vs.push_back(e1);
  46. }
  47. sort(vs.begin(),vs.end());
  48. cout<<f(n,m,k,0)<<endl;
  49. return 0;
  50. }
Success #stdin #stdout 0.01s 5316KB
stdin
11 6104 3
620 806 881 858 559 553 502 554 962 325 435
9279 464 7327 2549 9832 6595 8200 8720 7658 639 9992
stdout
5872048