Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- const int MaxN = 1005;
- int d[MaxN][20003], n;
- struct miau{int a, b;} v[MaxN];
- int main() {
- cin >> n;
- cin >> v[0].b;
- for (int i = 1; i < n; ++i) {
- cin >> v[i].a >> v[i].b;
- }
- for (int i = 0; i <= n; ++i) {
- for (int j = 0; j <= 20000; ++j) d[i][j] = -1e9;
- }
- for (int i = 0; i < v[0].b; ++i) d[1][i] = i;
- int ans = 0;
- for (int i = 2; i <= n; ++i) {
- int maxi = -1e9;
- for (int k = v[i - 1].a; k < v[i - 1].a + v[i - 1].b; ++k)
- d[i][k - v[i - 1].a] = max(d[i][k - v[i - 1].a], d[i - 1][k]);
- for (int k = v[i - 1].a + v[i - 1].b; k <= 20000; ++k)
- d[i][k] = max(d[i][k], d[i - 1][k]);
- for (int k = 0; k < v[i - 1].a; ++k)
- maxi = max(maxi, d[i - 1][k]);
- for (int j = 0; j < v[i - 1].b; ++j)
- d[i][j] = j + max(d[i][j] - j, maxi);
- for (int j = v[i - 1].b; j < v[i - 1].b + v[i - 1].a; ++j)
- d[i][j] = max(d[i][j], d[i - 1][j - v[i - 1].b] + v[i - 1].b);
- }
- for (int i = 0; i <= 20000; ++i) ans = max(ans, d[n][i]);
- cout << ans << '\n';
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement