Advertisement
Guest User

Untitled

a guest
Nov 18th, 2019
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.32 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 < int > > v;
  8.  
  9. int buy(int t, int 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.     int n, l;
  16.     cin >> n >> l;
  17.     v.resize(n, vector < int > (4));
  18.     for(int i = 0; i < n; i++) cin >> v[i][0] >> v[i][1] >> v[i][2] >> v[i][3];
  19.     int s = l, mx = 0;
  20.     for(int i = 0; i < n; i++) {
  21.         mx = max(mx, v[i][3]);
  22.     }
  23.     s += mx;
  24.     cout << s << endl;
  25.     vector < vector < int > > dp(s, vector < int > (n, INF));
  26.     vector < vector < int > > b(s, vector < int > (n, INF));
  27.     for(int 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(int i = 1; i < s; i++) {
  33.         for(int j = 0; j < n; j++) {
  34.             for(int t = 0; t < min(i, v[j][3]); t++) {
  35.                 if(buy(t, j) + dp[i - t][j - 1] < dp[i][j]) {
  36.                     dp[i][j] = min(dp[i][j], buy(t, j) + dp[i - t][j - 1]);
  37.                     b[i][j] = t;
  38.                 }
  39.             }
  40.         }
  41.     }
  42.     int ans = INF;
  43.     int a;
  44.     for(int i = l; i < s; i++) {
  45.         if(dp[i][n - 1] < ans) {
  46.             a = i;
  47.         }
  48.         ans = min(ans, dp[i][n - 1]);
  49.     }
  50.     cout << ans << endl;
  51.     vector < int > out(n, 0);
  52.     int i = n - 1;
  53.     while(i != 0 && a != 0) {
  54.         out[i] = b[a][i];
  55.         i--;
  56.         a -= b[a][i + 1];
  57.     }
  58.     for(int i = 0; i < n; i++) {
  59.         cout << out[i] << " ";
  60.     }
  61. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement