#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; bool dp[2][20001]; int main(void) { cin.tie(0); ios::sync_with_stdio(false); vector > v; int n, a, b; cin >> n; for (int i = 0; i < n; i++) { cin >> a >> b; v.push_back(make_pair(a, b)); } sort(v.begin(), v.end()); memset(dp, false, sizeof(dp)); dp[1][0] = true; for (int i = 0; i < n; i++) { memcpy(dp[0], dp[1], sizeof(dp[1])); memset(dp[1], false, sizeof(dp[1])); for (int j = 0; j < v[i].second; j++) { if (dp[0][j] == false) { continue; } dp[1][j + v[i].first] = true; } for (int j = 0; j <= 20000; j++) { if (dp[0][j]) { dp[1][j] = true; } } } int res = 0; for (int i = 0; i <= 20000; i++) { if (dp[1][i]) { res = max(res, i); } } cout << res << '\n'; return 0; }