Advertisement
Guest User

Trouble of 13-Dots

a guest
Jul 18th, 2019
104
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.06 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. const int N = 110;
  5. long long m,n;
  6. long long x,y;
  7.  
  8. pair<long long,long long> arr[N];
  9. long long memo[N][10010];
  10.  
  11. long long dp(long long idx,long long money, bool inc)
  12. {
  13.     if(idx == n)
  14.         return 0;
  15.     long long &ret = memo[idx][money];
  16.     if(~ret)
  17.         return ret;
  18.     if(m-money>2000 && !inc)
  19.     {
  20.         money+=200;
  21.         inc = true;
  22.     }
  23.     ret = (idx+1,money,inc);
  24.     if(money >= arr[idx].first)
  25.         ret = max(ret,dp(idx+1,money-arr[idx].first,inc)+arr[idx].second);
  26.     return ret;
  27. }
  28.  
  29.  
  30. int main()
  31. {
  32.     ios::sync_with_stdio(0);
  33.     cin.tie(NULL);
  34.     cout.tie(NULL);
  35.  
  36.     #ifndef ONLINE_JUDGE
  37.         freopen("input.txt", "r", stdin);
  38.         freopen("out.txt", "w", stdout);
  39.     #endif // ONLINE_JUDGE
  40.  
  41.     bool first = false;
  42.     while(cin >> m >> n)
  43.     {
  44.         memset(memo,-1,sizeof memo);
  45.         for(int i = 0; i < n; i++)
  46.         {
  47.             cin >> x >> y;
  48.             arr[i] = {x,y};
  49.         }
  50.         cout << dp(0,m,0) << endl;
  51.     }
  52.  
  53.     return 0;
  54. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement