fork download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. using ll = long long;
  4.  
  5. struct Strap { int a; ll b; };
  6. int main() {
  7. int n; cin >> n;
  8. vector<Strap> s(n);
  9. for(int i=0;i<n;i++) cin >> s[i].a >> s[i].b;
  10.  
  11. ll ans = LLONG_MIN;
  12. for(int root=0; root<n; root++) { // 루트 후보
  13. vector<ll> dp(2005, LLONG_MIN);
  14. dp[0] = 0;
  15. for(int i=0;i<n;i++) {
  16. if(i==root) continue;
  17. int t = s[i].a;
  18. ll val = s[i].b;
  19. for(int j=2000;j>=0;j--) if(dp[j]!=LLONG_MIN){
  20. int nj = j + max(0, t-1);
  21. nj = min(nj,2000);
  22. dp[nj] = max(dp[nj], dp[j]+val);
  23. }
  24. }
  25. int h = max(0, s[root].a);
  26. ll root_val = s[root].b;
  27. ll mx = LLONG_MIN;
  28. for(int i=0;i<=2000;i++){
  29. if(dp[i]!=LLONG_MIN && i<=h) mx = max(mx, dp[i]+root_val);
  30. }
  31. ans = max(ans, mx);
  32. }
  33. cout << ans << "\n";
  34. }
Success #stdin #stdout 0s 5312KB
stdin
15
1 -4034
1 3406
0 6062
4 -6824
0 9798
0 4500
0 -1915
1 2137
0 9786
0 7330
0 -9365
2 2730
0 -5797
0 6129
0 8925
stdout
60803