设为首页 加入收藏

TOP

Palindromic Subsequence(最长回文字符串 输出路径)
2015-07-20 17:32:33 来源: 作者: 【 】 浏览:2
Tags:Palindromic Subsequence 最长 字符串 输出 路径

初看好简单 一开始调试着一直re 后来也不知道怎么就对了 但是还有一些bug存在 ,

这道题的打印路径和light oj An Easy LCS(ps:点击打开链接)一样

但是只改一下会Tle 因为(1000*1000*1000)好大

但是把存储的字符串改为string 定义的就过了

但是还是有一点有点难受(下面会说出)

我也是醉了

#include 
  
   
#include 
   
     #include 
    
      #include 
     
       using namespace std; #define maxx 1010 char s1[maxx]; char s2[maxx]; int dp[maxx][maxx]; string s[maxx][maxx]; int main() { while(scanf("%s",s1+1)!=EOF){ memset(dp,0,sizeof(dp)); int k; int n=strlen (s1+1); for(int i=1;i<=n;i++) s2[i]=s1[n-i+1]; for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) { if(s1[i]==s2[j]) { dp[i][j]=dp[i-1][j-1]+1; s[i][j]=s1[i]+s[i-1][j-1]+s2[j]; } else { if(dp[i-1][j]>dp[i][j-1]) { dp[i][j]=dp[i-1][j]; s[i][j]=s[i-1][j]; } else if(dp[i][j-1]>dp[i-1][j]) { dp[i][j]=dp[i][j-1]; s[i][j]=s[i][j-1]; } else { dp[i][j]=dp[i-1][j]; if(s[i-1][j]>s[i][j-1]) s[i][j]=s[i][j-1]; else s[i][j]=s[i-1][j]; } } } string s3= s[n][n];//怎么也没有想到string定义的是这样输出的 int l = dp[n][n]; if(l & 1) { for(int i=0; i<(l-1)/2; i++) cout << s3[i]; for(int i=(l-1)/2; i>=0; i--) cout << s3[i]; } else { for(int i=0; i
      
       =0; i--) cout << s3[i]; } cout << endl; } }
      
     
    
   
  


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇HDU 4337 King Arthur's Knig.. 下一篇整合了刷新、加载更多、滑动删除..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·在 Redis 中如何查看 (2025-12-26 03:19:03)
·Redis在实际应用中, (2025-12-26 03:19:01)
·Redis配置中`require (2025-12-26 03:18:58)
·Asus Armoury Crate (2025-12-26 02:52:33)
·WindowsFX (LinuxFX) (2025-12-26 02:52:30)