当前位置: 代码迷 >> 综合 >> poj 2264 Advanced Fruits dp解LCS的对偶问题
  详细解决方案

poj 2264 Advanced Fruits dp解LCS的对偶问题

热度:51   发布时间:2024-01-19 05:28:26.0

题意:

给字符串a,b,求长度最短的包含a且包含b的字符串。

分析:

是个LCS的对偶问题,dp的方程也很像。

代码:

//poj 2264
//sep9
#include <iostream>
using namespace std;
const int MAXN=128;
int dp[MAXN][MAXN],path[MAXN][MAXN];
char a[MAXN],b[MAXN];
void print(int n,int m)
{if(n==0&&m==0)return ;if(path[n][m]==0){print(n-1,m-1);printf("%c",a[n]);}else if(path[n][m]==-1){print(n,m-1);printf("%c",b[m]);}else{print(n-1,m);printf("%c",a[n]);}}int main()
{while(scanf("%s%s",a+1,b+1)==2){int n=strlen(a+1),m=strlen(b+1);for(int i=1;i<=n;++i)dp[i][0]=i,path[i][0]=1;for(int j=1;j<=m;++j)dp[0][j]=j,path[0][j]=-1;for(int i=1;i<=n;++i)for(int j=1;j<=m;++j){if(a[i]==b[j])dp[i][j]=dp[i-1][j-1]+1,path[i][j]=0;else{if(dp[i][j-1]<dp[i-1][j])dp[i][j]=dp[i][j-1]+1,path[i][j]=-1;elsedp[i][j]=dp[i-1][j]+1,path[i][j]=1;}}print(n,m);puts("");}return 0;	
} 


  相关解决方案