Advertisement
a53

SUBSIR_MAXIM_PROG_DIN

a53
Mar 7th, 2018
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.55 KB | None | 0 0
  1. /// https://www.infoarena.ro/problema/subsiruri
  2.  
  3. #include <bits/stdc++.h>
  4. #define modulo 9901
  5.  
  6. using namespace std;
  7. ifstream fin ("subsiruri.in");
  8. ofstream fout ("subsiruri.out");
  9.  
  10. int n, a[1007];
  11. int dp[1007], maximdp; /// lung celui mai lung subsir cresc care incepe la i
  12. int nr[1007]; /// nr de
  13.  
  14. void Citire()
  15. {
  16. int i;
  17. fin >> n;
  18. for (i = 1; i <= n ; i++)
  19. fin >> a[i];
  20. /**
  21. for (i = 1; i <= n; i++)
  22. cout << a[i] << " ";
  23. cout << "\n";
  24. //*/
  25. }
  26.  
  27. void DP()
  28. {
  29. int i, j, m;
  30. dp[n] = 1;
  31. for (i = n - 1; i >= 1; i--)
  32. {
  33. m = 0;
  34. for (j = i + 1 ; j <= n; j++)
  35. if (a[i] < a[j] && dp[j] > m)
  36. m = dp[j];
  37. dp[i] = m + 1;
  38. maximdp = max(maximdp, dp[i]);
  39. }
  40. fout << maximdp << "\n";
  41. /**
  42. for (i = 1; i <= n; i++)
  43. cout << dp[i] << " ";
  44. cout << "\n";
  45. //*/
  46. }
  47.  
  48. void Rezolvare()
  49. {
  50. int i, j;
  51. int maxim;
  52. for (i = n; i >= 1; i--)
  53. if (dp[i] == 1) nr[i] = 1;
  54. else
  55. for (j = i + 1; j <= n; j++)
  56. if (a[i] < a[j] && dp[i] == dp[j] + 1)
  57. nr[i] = (nr[i] + nr[j]) % modulo;
  58. /**
  59. for (i = 1; i <= n; i++)
  60. cout << nr[i] << " ";
  61. cout << "\n";
  62. //*/
  63.  
  64. maxim = 0;
  65. for (i = 1; i <= n; i++)
  66. if (dp[i] == maximdp)
  67. maxim = (maxim + nr[i]) % modulo;
  68. fout << maxim << "\n";
  69. }
  70.  
  71. int main()
  72. {
  73. Citire();
  74. DP();
  75. Rezolvare();
  76. fin.close();
  77. fout.close();
  78. return 0;
  79. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement