bibaboba12345

Untitled

Jan 21st, 2022
205
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.85 KB | None | 0 0
  1. #define _CRT_SECURE_NO_WARNINGS
  2. #pragma GCC target("avx2")
  3. #pragma GCC optimize("Ofast")
  4. #include <iostream>
  5. #include <algorithm>
  6. #include <string>
  7. #include <cmath>
  8. #include <iomanip>
  9. #include <vector>
  10. #include <set>
  11. #include <map>
  12.  
  13. using namespace std;
  14. const int N = 1005,K = 10, M = 1e9 + 7;
  15.  
  16. int dp[11][1010][1010], k, q, t, n, op;
  17.  
  18.  
  19. struct Sost {
  20. int op, r, sum, l;
  21. };
  22.  
  23. Sost p[11][1010][1010], best[1010];
  24.  
  25. bool minim(int& a, int b) {
  26. if (a > b) {
  27. a = b;
  28. return true;
  29. }
  30. return false;
  31. }
  32.  
  33. signed main()
  34. {
  35. #ifdef _DEBUG
  36. freopen("input.txt", "r", stdin);
  37. //freopen("trains.out", "w", stdout);
  38. #else
  39. //freopen("sequence.in", "r", stdin);
  40. //freopen("sequence.out", "w", stdout);
  41. #endif
  42. cin >> k >> q;
  43. for (int l = 0; l <= K; l++) {
  44. for (int sumt = 0; sumt <= N; sumt++) {
  45. for (int suml = 0; suml <= N; suml++) {
  46. dp[l][sumt][suml] = 200;
  47. }
  48. }
  49. }
  50. for (int i = 0; i < N; i++) {
  51. best[i] = { 200,0,0 };
  52. }
  53. dp[0][0][0] = 0;
  54. for (int l = 0; l < K; l++) {
  55. for (int sumt = 0; sumt <= N; sumt++) {
  56. for (int suml = 0; suml <= N; suml++) {
  57. if (best[sumt].op > dp[l][sumt][suml]) {
  58. best[sumt] = { dp[l][sumt][suml],l,sumt,suml};
  59. }
  60. if (minim(dp[l][sumt + 1][suml], dp[l][sumt][suml] + 1)) {
  61. p[l][sumt+ 1][suml] = { 1,l,sumt, -1 };
  62. }
  63. if (sumt + suml <= N && l < k && minim(dp[l + 1][0][sumt + suml], dp[l][sumt][suml])) {
  64. p[l + 1][0][sumt + suml] = { 0, l, suml, -1 };
  65. }
  66. if (sumt + suml <= N && minim(dp[l][sumt + suml][suml], dp[l][sumt][suml] + 1)) {
  67. p[l][sumt + suml][suml] = { 2, l, sumt, -1 };
  68. }
  69. }
  70. }
  71. }
  72. cin >> t;
  73. for (int I = 0; I < t; I++) {
  74. cin >> n;
  75. vector<Sost> ans;
  76. int l = best[n].r;
  77. int sumt = best[n].sum;
  78. int suml = best[n].l;
  79. while (l != 0 || sumt != 0 || suml != 0) {
  80. if (p[l][sumt][suml].op == 1) {
  81. ans.push_back({ 0, l + 1, -1, -1 });
  82. sumt--;
  83. continue;
  84. }
  85. if (p[l][sumt][suml].op == 0) {
  86. int sml = p[l][sumt][suml].sum;
  87. sumt = suml - sml;
  88. suml = sml;
  89. l--;
  90. continue;
  91. }
  92. if (p[l][sumt][suml].op == 2) {
  93. ans.push_back({ 1, l + 1, -1, -1 });
  94. sumt = p[l][sumt][suml].sum;
  95. }
  96. }
  97. cout << best[n].op << "\n";
  98. for (int i = ans.size() - 1; i >= 0; i--) {
  99. cout << ans[i].op << " " << ans[i].r << "\n";
  100. }
  101. }
  102.  
  103. }
Advertisement
Add Comment
Please, Sign In to add comment