Advertisement
Alex_tz307

USACO 2015 December Contest, Gold Problem 2. Fruit Feast

Apr 1st, 2021
177
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.75 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. ifstream fin("feast.in");
  6. ofstream fout("feast.out");
  7.  
  8. const int NMAX = 5e6 + 6;
  9. bool dp1[NMAX], dp2[NMAX];
  10.  
  11. void solve() {
  12.   int N, A, B;
  13.   fin >> N >> A >> B;
  14.   if (A > B)
  15.     swap(A, B);
  16.   dp1[0] = true;
  17.   for (int i = A; i <= N; ++i) {
  18.     dp1[i] |= dp1[i - A];
  19.     if (i >= B)
  20.       dp1[i] |= dp1[i - B];
  21.     dp2[i / 2] |= dp1[i];
  22.   }
  23.   dp2[0] = true;
  24.   for (int i = A; i <= N; ++i) {
  25.     dp2[i] |= dp2[i - A];
  26.     if (i >= B)
  27.       dp2[i] |= dp2[i - B];
  28.   }
  29.   for (int i = N; i >= 0; --i)
  30.     if (dp2[i]) {
  31.       fout << i << '\n';
  32.       return;
  33.     }
  34. }
  35.  
  36. void close_files() {
  37.   fin.close();
  38.   fout.close();
  39. }
  40.  
  41. int main() {
  42.   solve();
  43.   close_files();
  44.   return 0;
  45. }
  46.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement