程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> Palindromic Subsequence(最長回文字符串 輸出路徑)

Palindromic Subsequence(最長回文字符串 輸出路徑)

編輯:C++入門知識

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;
       }
    }


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved