Advertisement
Alex_tz307

Fundamente XI - Cereri(ONI '97) - 210

Sep 20th, 2020 (edited)
108
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.95 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. int main() {
  6.     ios_base::sync_with_stdio(false);
  7.     cin.tie(nullptr);
  8.     cout.tie(nullptr);
  9.     int N;
  10.     cin >> N;
  11.     vector < int > a(N + 1);
  12.     for(int i = 1; i <= N; ++i)
  13.         cin >> a[i];
  14.     vector < int > dp(10001, -1);
  15.     // dp[x] = y <=> la vanzarea a x litri administratorul mai mare maximum y litri in butoi
  16.     int mx = 0;
  17.     dp[0] = 0;
  18.     for(int i = 1; i <= N; ++i) {
  19.         for(int j = mx; j >= 0; --j)
  20.             if(dp[j] >= a[i] && dp[j + a[i]] < dp[j] - a[i]) { // vreau sa vand j + a[i] litri(j sigur am vandut pana acum)
  21.                 dp[j + a[i]] = dp[j] - a[i]; // Pentru asta din dp[j] litri cati mai am maxim pierd a[i]
  22.                 mx = max(mx, j + a[i]); // daca am ajuns pana aici, sigur pot vinde j + a[i] si verific daca e maxim
  23.             }
  24.         dp[0] += a[i]; // dp[0] considera ca n-a vandut nimic pana acum de ex
  25.     }
  26.     cout << mx;
  27. }
  28.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement