Advertisement
Guest User

Untitled

a guest
Nov 18th, 2019
107
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.53 KB | None | 0 0
  1. #include<iostream>
  2. #include<vector>
  3.  
  4. using namespace std;
  5.  
  6. const long long INF = 1e12;
  7. vector < vector < long long > > v;
  8.  
  9. long long buy(long long t, long long k) {
  10.     if(t < v[k][1]) return v[k][0] * t;
  11.     else return v[k][2] * t;
  12. }
  13.  
  14. int main() {
  15.     long long n, l;
  16.     cin >> n >> l;
  17.     v.resize(n, vector < long long > (4));
  18.     for(long long i = 0; i < n; i++) cin >> v[i][0] >> v[i][1] >> v[i][2] >> v[i][3];
  19.     long long s = l, mx = 0;
  20.     for(long long i = 0; i < n; i++) {
  21.         mx = max(mx, v[i][3]);
  22.     }
  23.     s += mx + 10;
  24.     cout << s << endl;
  25.     vector < vector < long long > > dp(s + 1, vector < long long > (n, INF));
  26.     vector < vector < long long > > b(s + 1, vector < long long > (n, INF));
  27.     for(long long i = 0; i <= s; i++) {
  28.         if(i < v[0][1]) dp[i][0] = v[0][0] * i;
  29.         else dp[i][0] = v[0][2] * i;
  30.         b[i][0] = i;
  31.     }
  32.     for(long long i = 0; i <= s; i++) {
  33.         for(long long j = 1; j < n; j++) {
  34.             for(long long t = 0; t <= min(i, v[j][3]); t++) {
  35.                 cout << t << " ";
  36.                 if(buy(t, j) + dp[i - t][j - 1] < dp[i][j]) {
  37.                     dp[i][j] = buy(t, j) + dp[i - t][j - 1];
  38.                     b[i][j] = t;
  39.                 }
  40.             }
  41.             cout << endl;
  42.         }
  43.     }
  44.     long long ans = INF;
  45.     long long a;
  46.     for(long long i = l; i <= s; i++) {
  47.         if(dp[i][n - 1] < ans) {
  48.             a = i;
  49.             ans = dp[i][n - 1];
  50.         }
  51.     }
  52.    
  53.     cout << a << " " << ans << endl;
  54.     vector < long long > out(n, 0);
  55.     long long i = n - 1;
  56.     while(i != -1 && a != 0) {
  57.         out[i] = b[a][i];
  58.         cout << out[i] << " ";
  59.         i--;
  60.         a -= b[a][i + 1];
  61.     }
  62.     for(long long i = 0; i < n; i++) {
  63.         cout << out[i] << " ";
  64.     }
  65. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement