uva 11404 LCS打印字典序最小路径

来源:互联网 发布:windows查看cpu使用率 编辑:程序博客网 时间:2024/04/28 13:01
#include<stdio.h>#include<iostream>#include<string.h>#include<string>#define N 1020using namespace std;int dp[N][N];char str[N][N][N];string st[N][N];char a[N],b[N];int maxn;string jieguo;int main(){int i,j,k,l;while(~scanf("%s",a+1)){l=strlen(a+1);for(i=1;i<=l;i++){b[i]=a[l-i+1];}for(i=0;i<=l;i++){dp[0][i]=0;dp[i][0]=0;//st[0][i]="";//st[i][0]="";st[i][0].clear();st[0][i].clear();}for(i=1;i<=l;i++){for(j=1;j<=l;j++){if(a[i]==b[j]){dp[i][j]=dp[i-1][j-1]+1;st[i][j]=st[i-1][j-1]+a[i];}else {if(dp[i][j-1]>dp[i-1][j]){dp[i][j]=dp[i][j-1];st[i][j]=st[i][j-1];}else if(dp[i][j-1]==dp[i-1][j]){dp[i][j]=dp[i][j-1];if(st[i][j-1]>st[i-1][j]){st[i][j]=st[i-1][j];}elsest[i][j]=st[i][j-1];}else{dp[i][j]=dp[i-1][j];st[i][j]=st[i-1][j];}}}}maxn=-1;int flag=0;//jieguo="";jieguo.clear();//jieguo存对称的部分for(i=1;i<l;i++)//偶数情况{if(flag==0){maxn=dp[i][l-i];jieguo=st[i][l-i];flag=1;continue;}if(maxn<dp[i][l-i]){maxn=dp[i][l-i];jieguo=st[i][l-i];}else if(maxn==dp[i][l-i]){if(jieguo>st[i][j-1])jieguo=st[i][j-1];}}maxn=maxn*2;int tmp=0;for(i=1;i<=l;i++)//把第i个字符当做奇数回文中心{if(maxn<dp[i-1][l-i]*2+1){maxn=dp[i-1][l-i]*2+1;jieguo=st[i-1][l-i]+a[i];}//if(maxn==dp[i-1][l-i-1])//不可能出现else if(maxn==dp[i-1][l-i]*2+1){if(jieguo>(st[i-1][l-i]+a[i]))jieguo=st[i-1][l-i]+a[i];}}if(maxn%2==0){//printf("%s",jieguo);cout<<jieguo;for(i=jieguo.length()-1;i>=0;i--){//printf("%c",jieguo[i]);cout<<jieguo[i];}}else{//printf("%s",jieguo);cout<<jieguo;for(i=jieguo.length()-2;i>=0;i--){//printf("%c",jieguo[i]);cout<<jieguo[i];}}printf("\n");}return 0;}

原创粉丝点击