Advertisement
Guest User

Untitled

a guest
Feb 22nd, 2020
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.21 KB | None | 0 0
  1. #include<set>
  2. #include<vector>
  3. #include<cstdio>
  4. #include<cstring>
  5. #include<iostream>
  6. #include<algorithm>
  7.  
  8. using namespace std;
  9.  
  10. const int M = 11;
  11.  
  12. int n, m, a[M];
  13.  
  14. vector<vector<int> > nst;
  15.  
  16. vector<int> tmp;
  17.  
  18. set<pair<vector<int>, vector<int> > > mem;
  19.  
  20. void go(vector<int> &cst, int b, int s) {
  21. vector<vector<int> > st;
  22. vector<int> init;
  23. init.push_back(b);
  24. init.push_back(s);
  25. st.push_back(init);
  26. vector<int> bak = cst;
  27. reverse(bak.begin(), bak.end());
  28. for (int i = 0; i < (int)cst.size(); ++i) {
  29. vector<vector<int> > nst;
  30. bak.pop_back();
  31. for (int j = 0; j < (int)st.size(); ++j) {
  32. if (j && st[j] == st[j - 1]) {
  33. continue;
  34. }
  35. vector<int> tmp = st[j];
  36. if (mem.count(make_pair(tmp, bak))) {
  37. continue;
  38. }
  39. mem.insert(make_pair(tmp, bak));
  40. int b = tmp[tmp.size() - 2],
  41. s = tmp[tmp.size() - 1];
  42. tmp.pop_back(), tmp.pop_back();
  43. for (int k = max(0, cst[i] - s); k <= (int)cst[i] && k <= b; ++k) {
  44. vector<int> ntmp = tmp;
  45. if (k == 0 || k == cst[i]) {
  46. ntmp.push_back(cst[i]);
  47. } else {
  48. ntmp.push_back(k);
  49. ntmp.push_back(cst[i] - k);
  50. }
  51. sort(ntmp.begin(), ntmp.end());
  52. ntmp.push_back(b - k);
  53. ntmp.push_back(s - (cst[i] - k));
  54. nst.push_back(ntmp);
  55. }
  56. }
  57. sort(nst.begin(), nst.end());
  58. st = nst;
  59. }
  60. for (int i = 0; i < (int)st.size(); ++i) {
  61. if (i && st[i] == st[i - 1]) {
  62. continue;
  63. }
  64. vector<int> tmp = st[i];
  65. tmp.pop_back();
  66. tmp.pop_back();
  67. nst.push_back(tmp);
  68. }
  69. }
  70.  
  71. int main() {
  72. scanf("%d%d", &n, &m);
  73. for (int i = 0; i < m; ++i) {
  74. scanf("%d", a + i);
  75. }
  76. vector<vector<int> > st;
  77. vector<int> init;
  78. init.push_back(n);
  79. st.push_back(init);
  80. for (int i = 0; i < m; ++i) {
  81. mem.clear();
  82. cout << i << ' ' << st.size() << endl;
  83. for (int j = 0; j < (int)st.size(); ++j) {
  84. if (j && st[j] == st[j - 1]) {
  85. continue;
  86. }
  87. go(st[j], a[i], n - a[i]);
  88. }
  89. sort(nst.begin(), nst.end());
  90. st = nst;
  91. nst.clear();
  92. }
  93. int ans = 0;
  94. for (int i = 0; i < (int)st.size(); ++i) {
  95. int cnt = 0;
  96. for (int j = 0; j < (int)st[i].size(); ++j) {
  97. if (st[i][j] == 1) {
  98. ++cnt;
  99. }
  100. }
  101. ans = max(ans, cnt);
  102. }
  103. printf("%d\n", ans);
  104. return 0;
  105. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement