初看好簡單 一開始調試著一直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; } }