现在的位置: 首页 > 综合 > 正文

poj 2250 Compromise(DP)

2018年03月17日 ⁄ 综合 ⁄ 共 812字 ⁄ 字号 评论关闭
题意 : 找出两个text 中 最长的公共子串 有多组测试数据

思路:经典的LCS问题,只是把字母改成了字符串而已

//228K   
0MS
#include <stdio.h>
#include <string.h>
#define M 105

char
s1[M][35],s2[M][35];     
//s1记录text1的每个word s2 记录text2的每个word
char
ans[M][35];                
//ans 保存最后的结果
char
b[M][M];                  
//b[][]记录路径
int n,m,num;

void print (int i,int
j)          
//递归找出ans 算导上的方法
{
    if (i ==
0||j == 0)
       
return ;
    if (b[i][j]
== '#')
    {
       
print (i - 1,j - 1);
       
strcpy (ans[num ++],s1[i]);
    }
    else if
(b[i][j] == 'U')
       
print (i - 1,j);
    else
       
print (i,j - 1);
}
void DP ()
{
    int
i,j;
    int
c[M][M];

    for (i = 0;i
< M;i ++)
       
c[i][0] = c[0][i] = 0;
    for (i = 1;i
<= n;i ++)
       
for (j = 1;j <= m;j ++)
       
{
           
if (strcmp (s1[i],s2[j]) == 0)
           
{
               
c[i][j] = c[i-1][j-1] + 1;
               
b[i][j] =
'#';             
//# 号代比左上方
           
}
           
else
           
{
             

抱歉!评论已关闭.