Advertisement
milon34

maximum substring/subsequence palindrome length(dp)

Jan 21st, 2023 (edited)
48
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.86 KB | None | 0 0
  1. //substring
  2.  
  3. #include <bits/stdc++.h>
  4. using namespace std;
  5. #define ll long long int
  6. const int mod = 1000000007;
  7. const int mx = 1005;
  8. int dp[mx][mx];
  9. string s;
  10. ll solve(int b, int e) {
  11.   if (b >= e) {
  12.     return 1;
  13.   }
  14.   if (dp[b][e] != -1) {
  15.     return dp[b][e];
  16.   }
  17.   if (s[b] == s[e]) {
  18.     return dp[b][e] = solve(b + 1, e - 1);
  19.   } else {
  20.     return dp[b][e] = 0;
  21.   }
  22. }
  23. int main() {
  24.   ios_base::sync_with_stdio(false);
  25.   cin.tie(0);
  26.   cout.tie(0);
  27.   memset(dp, -1, sizeof(dp));
  28.   cin >> s;
  29.   int res = -1;
  30.   for (int i = 0; i < s.size() ; i++) {
  31.     for (int j = i; j < s.size(); j++) {
  32.       if (solve(i, j)) {
  33.         // cout << i << " " << j << endl;
  34.         res = max(res, j - i + 1);
  35.       }
  36.     }
  37.   }
  38.   cout << res << endl;
  39.   return 0;
  40. }
  41.  
  42.  
  43.  
  44.  
  45.  
  46.  
  47.  
  48.  
  49. //subsequence
  50.  
  51. #include <bits/stdc++.h>
  52. using namespace std;
  53. #define ll long long int
  54. const int mod = 1000000007;
  55. const int mx = 1005;
  56. int dp[mx][mx];
  57. string s;
  58. pair<int,int>nxt[mx][mx];
  59. ll solve(int b, int e) {
  60.   if (b == e) {
  61.     return 1;
  62.   }
  63.   if (b > e) {
  64.     return 0;
  65.   }
  66.   if (dp[b][e] != -1) {
  67.     return dp[b][e];
  68.   }
  69.   if (s[b] == s[e]) {
  70.     nxt[b][e]={b+1,e-1};
  71.     return dp[b][e] = solve(b + 1, e - 1) + 2;
  72.   } else {
  73.     int val1 = solve(b + 1, e);
  74.     int val2 = solve(b, e - 1);
  75.     if(val1>val2){
  76.       nxt[b][e]={b+1,e};
  77.     }else{
  78.       nxt[b][e]={b,e-1};
  79.     }
  80.     return dp[b][e] = max(val1, val2);
  81.   }
  82. }
  83. int main() {
  84.   ios_base::sync_with_stdio(false);
  85.   cin.tie(0);
  86.   cout.tie(0);
  87.   memset(dp, -1, sizeof(dp));
  88.   cin >> s;
  89.   // int res = -1;
  90.   // for (int i = 0; i < s.size(); i++) {
  91.   //   for (int j = i; j < s.size(); j++) {
  92.   //     if (solve(i, j)) {
  93.   //       // cout << i << " " << j << endl;
  94.   //       res = max(res, j - i + 1);
  95.   //     }
  96.   //   }
  97.   // }
  98.   cout << solve(0, s.size() - 1) << endl;
  99.   return 0;
  100. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement