P2340 [USACO03FALL]Cow Exhibition Ghttps://www.luogu.com.cn/problem/P2340
#include <iostream>
#include <cstdio>
#include <string>
#include <algorithm>
#include <vector>
#include <queue>
#include <stack>
#include <cstring>
#include <set>
#include <cmath>
#include <map>
#include <cstdlib>
typedef long long ll;
typedef unsigned long long ull;
using namespace std;
const int MN = 65005;
const int MAXN = 2000010;
const int INF = 0x3f3f3f3f;
#define IOS ios::sync_with_stdio(false)
int a[449], b[449], dp[MAXN];
int n, ans;
int main() {
scanf("%d", &n);
for (int i = 1; i <= n; i++) {
scanf("%d %d", a + i, b + i);
}
memset(dp, -INF, sizeof(dp));
dp[400000] = 0;
for (int i = 1; i <= n; i++) {
if (a[i] >= 0) {
for (int j = 800000; j >= a[i]; j--) {
dp[j] = max(dp[j], dp[j - a[i]] + b[i]);
}
} else {
for (int j = 0; j <= 800000 + a[i]; j++) {
dp[j] = max(dp[j], dp[j - a[i]] + b[i]);
}
}
}
for (int i = 400000; i <= 800000; i++) {
if (dp[i] >= 0) {
ans = max(ans, dp[i] + i - 400000);
}
}
printf("%d", ans);
return 0;
}