fork download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. using ll = long long;
  4.  
  5. int main() {
  6. int n; cin >> n;
  7. const int MX = 2005;
  8. ll dp[MX];
  9. fill(dp, dp+MX, LLONG_MIN);
  10. dp[0] = 0;
  11.  
  12. ll phoneMax = 0; // 휴대폰 직접 연결 후보 최대 즐거움
  13.  
  14. for(int i = 0; i < n; i++) {
  15. int a, b; cin >> a >> b;
  16. if(a == 0) {
  17. phoneMax = max(phoneMax, (ll)b);
  18. } else {
  19. for(int j = MX-1; j >= 0; j--) if(dp[j] != LLONG_MIN){
  20. int nj = j + a - 1;
  21. nj = min(nj, MX-1);
  22. dp[nj] = max(dp[nj], dp[j] + b);
  23. }
  24. }
  25. }
  26.  
  27. ll ans = LLONG_MIN;
  28. for(int i = 0; i < MX; i++) ans = max(ans, dp[i] + phoneMax);
  29. cout << ans << "\n";
  30. }
Success #stdin #stdout 0.01s 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
18071