Guest User

Untitled

a guest
Mar 6th, 2018
52
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.15 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. ifstream f("summax.in");
  4. ofstream g("summax.out");
  5. const int nMax = 2003;
  6. const long long inf = 2000000001;
  7. int *dp[nMax], *dp_num[nMax];
  8. inline void Recon(int k, int n) {
  9. int j = 1;
  10. for(int i = 1; i < n; i++) {
  11. g << j << " ";
  12. if(dp[i + 1][j] == dp[i + 1][j + 1]) {
  13. if(k > dp_num[i + 1][j]) {
  14. k -= dp_num[i + 1][j];
  15. j++;
  16. }
  17. continue;
  18. }
  19. if(dp[i + 1][j] < dp[i + 1][j + 1]) {
  20. j++;
  21. }
  22. }
  23. g << j << " ";
  24. g << "\n";
  25. }
  26. inline void Cer1(int n) {
  27.  
  28. int summax = 0;
  29. for(int i = n - 1; i >= 1; i--) {
  30. for(int j = i; j >= 1; j--) {
  31. dp[i][j] = max(dp[i + 1][j + 1], dp[i + 1][j]) + dp[i][j];
  32. }
  33. }
  34. dp_num[n][n] = 1;
  35. for(int i = n - 1; i >= 1; i--) {
  36. for(int j = i; j >= 1; j--) {
  37. summax = max(dp[i + 1][j + 1], dp[i + 1][j]);
  38. if(summax == dp[i + 1][j]) {
  39. dp_num[i][j] = max(dp_num[i][j],dp_num[i + 1][j]);
  40. }
  41. if(summax == dp[i + 1][j + 1]) {
  42. dp_num[i][j] = max(dp_num[i][j],dp_num[i + 1][j + 1]);
  43. }
  44. if(summax == dp[i + 1][j] && summax == dp[i + 1][j + 1]) {
  45. if(1LL * dp_num[i + 1][j] + dp_num[i + 1][j + 1] >= inf - 1) {
  46. dp_num[i][j] = inf;
  47. }
  48. else {
  49. dp_num[i][j] = dp_num[i + 1][j] + dp_num[i + 1][j + 1];
  50. }
  51. }
  52. }
  53. }
  54. }
  55. inline void Cer2(int n, int st, int dr){
  56. for(int i = st; i <= dr; i++) {
  57. Recon(i, n);
  58. }
  59. }
  60. int main()
  61. {
  62. int n, st, dr, cer, x;
  63. f>> cer;
  64. f>> n >> st >> dr;
  65. for(int i = 1; i <= n; i++) {
  66. dp[i] = new int [i + 2];
  67. dp_num[i] = new int [i + 2];
  68. for(int j = 1; j <= i; j++) {
  69. f >> x;
  70. dp[i][j] = x;
  71. dp_num[i][j] = 1;
  72. }
  73. }
  74. Cer1(n);
  75. if(cer == 1) {
  76. g << dp_num[1][1] << "\n";
  77. }
  78. else {
  79. Cer2(st, dr, n);
  80. }
  81. return 0;
  82. }
Advertisement
Add Comment
Please, Sign In to add comment