fork download
  1. #include <iostream>
  2. #include <vector>
  3.  
  4. using namespace std;
  5.  
  6. int main()
  7. {
  8. int n, k;
  9. cin >> n >> k;
  10. vector<int> c(n);
  11. for (int i = 0; i < n; ++i)
  12. {
  13. int C;
  14. cin >> C;
  15. c[i] = C;
  16. }
  17. vector<int> l(n);
  18. for (int i = 0; i < n; ++i)
  19. {
  20. int L;
  21. cin >> L;
  22. l[i] = L;
  23. }
  24.  
  25. vector<vector<uint32_t>> A(n + 1, vector<uint32_t>(k + 1));
  26. vector<vector<vector<int>>> B(n + 1, vector<vector<int>>(k + 1, vector<int>(n + 1)));
  27.  
  28. uint32_t max = 0;
  29. for (int i = 1; i <= n; ++i)
  30. {
  31. for (int j = 0; j <= k; ++j)
  32. {
  33. uint32_t maxC = 0;
  34. int bestO = 0;
  35. for (int o = 1; o * c[i - 1] <= j; ++o)
  36. {
  37. uint32_t C = A[i - 1][j - o * c[i - 1]];
  38. for (int p = 0; p < i; ++p)
  39. {
  40. int s = min(o, l[p] - B[i - 1][j - o * c[i - 1]][p]);
  41. if(s < 0) s = 0;
  42. C += s * c[p];
  43. }
  44. if (C > maxC)
  45. {
  46. maxC = C;
  47. bestO = o;
  48. }
  49. }
  50.  
  51. A[i][j] = maxC;
  52. B[i][j] = B[i - 1][j - bestO * c[i - 1]];
  53. for (int p = 0; p < i; ++i)
  54. {
  55. int s = min(bestO, l[p] - B[i][j][p]);
  56. if(s < 0) s = 0;
  57. B[i][j][p] += s;
  58. }
  59.  
  60. if (maxC > max)
  61. {
  62. max = maxC;
  63. }
  64. }
  65. }
  66.  
  67. cout << max << endl;
  68. }
Runtime error #stdin #stdout 0s 3472KB
stdin
6 8
7 2 3 5 7 2
1 3 0 3 2 1
stdout
Standard output is empty