Advertisement
Guest User

Untitled

a guest
Nov 19th, 2019
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.04 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. vector<vector<int>> dp;
  5. vector<vector<pair<int, int>>> p;
  6.  
  7. void update(int a, int b, int c, int d, int val)
  8. {
  9. if (dp[a][b] >= val) return;
  10. dp[a][b] = val;
  11. p[a][b] = {c, d};
  12. }
  13.  
  14. int main()
  15. {
  16. int n;
  17. cin >> n;
  18. dp.assign(n + 1, vector<int>(128, 0));
  19. p.assign(n + 1, vector<pair<int, int>>(128, {0, 0}));
  20.  
  21. for(int i = 1; i <= n; i++)
  22. for(int j = 0; j < (1 << 7); ++j)
  23. {
  24. update(i, j >> 1, i - 1, j, dp[i - 1][j]);
  25. if ((j & 1) || (j & 8)) continue;
  26. update(i, (j >> 1) + 64, i - 1, j, dp[i - 1][j] + 1);
  27. }
  28.  
  29. int id = 0;
  30. for (int i = 1; i < 128; i++)
  31. if (dp[n][i] > dp[n][id]) id = i;
  32.  
  33. vector<int> ans;
  34. int mask = id;
  35. int now = n;
  36. while(now)
  37. {
  38. pair<int, int> from = p[now][mask];
  39. if (dp[now][mask] > dp[from.first][from.second])
  40. ans.push_back(now);
  41. now = from.first;
  42. mask = from.second;
  43. }
  44.  
  45. reverse(ans.begin(), ans.end());
  46. cout << (int)ans.size() << endl;
  47. for(auto i: ans)
  48. cout << i << ' ';
  49. cout << endl;
  50. return 0;
  51. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement