Advertisement
Guest User

Untitled

a guest
May 24th, 2018
112
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.18 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4. const int MaxN = 1005;
  5. int d[MaxN][20003], n;
  6. struct miau{int a, b;} v[MaxN];
  7.  
  8. int main() {
  9.     cin >> n;
  10.     cin >> v[0].b;
  11.     for (int i = 1; i < n; ++i) {
  12.         cin >> v[i].a >> v[i].b;
  13.     }
  14.     for (int i = 0; i <= n; ++i) {
  15.         for (int j = 0; j <= 20000; ++j) d[i][j] = -1e9;
  16.     }
  17.     for (int i = 0; i < v[0].b; ++i) d[1][i] = i;
  18.  
  19.     int ans = 0;
  20.     for (int i = 2; i <= n; ++i) {
  21.         int maxi = -1e9;
  22.  
  23.         for (int k = v[i - 1].a; k < v[i - 1].a + v[i - 1].b; ++k)
  24.             d[i][k - v[i - 1].a] = max(d[i][k - v[i - 1].a], d[i - 1][k]);
  25.  
  26.         for (int k = v[i - 1].a + v[i - 1].b; k <= 20000; ++k)
  27.             d[i][k] = max(d[i][k], d[i - 1][k]);
  28.  
  29.         for (int k = 0; k < v[i - 1].a; ++k)
  30.             maxi = max(maxi, d[i - 1][k]);
  31.  
  32.         for (int j = 0; j < v[i - 1].b; ++j)
  33.              d[i][j] = j + max(d[i][j] - j, maxi);
  34.  
  35.         for (int j = v[i - 1].b; j < v[i - 1].b + v[i - 1].a; ++j)
  36.             d[i][j] = max(d[i][j], d[i - 1][j - v[i - 1].b] + v[i - 1].b);
  37.  
  38.     }
  39.     for (int i = 0; i <= 20000; ++i) ans = max(ans, d[n][i]);
  40.     cout << ans << '\n';
  41.     return 0;
  42. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement