码迷,mamicode.com
首页 > 其他好文 > 详细

最长公共子序列解题报告

时间:2015-04-11 19:14:56      阅读:158      评论:0      收藏:0      [点我收藏+]

标签:

技术分享
if(x[i]==y[j])    f[i][j]=f[i-1][j-1]+1;
else if(x[i]!=y[j])    f[i][j]=max(f[i-1][j], f[i][j-1]);
原决策

这一块其实
动规方程是

技术分享
f[i][j]=max(f[i-1][j-1]+(x[i]==y[j]), f[i][j-1], f[i-1][j]);
动规方程

可以联系到射箭一题

技术分享
 1 #include <stdio.h>
 2 #define maxn 501
 3 int x[maxn], y[maxn], f[maxn][maxn];
 4 int max(int a, int b)
 5 {
 6     if(a>b)    return a;
 7     return b;
 8 }
 9 int main()
10 {
11     int i, j, lx, ly;
12     scanf("%d%d", &lx, &ly);
13     for(i=1; i<=lx; i++)    scanf("%d", &x[i]);
14     for(i=1; i<=ly; i++)    scanf("%d", &y[i]);
15     for(i=1; i<=lx; i++)
16         for(j=1; j<=ly; j++)
17         {
18             if(x[i]==y[j])    f[i][j]=f[i-1][j-1]+1;
19             else if(x[i]!=y[j])    f[i][j]=max(f[i-1][j], f[i][j-1]);
20             //可以变成一句
21             //f[i][j]=max(f[i-1][j-1]+(x[i]==y[j]), f[i][j-1], f[i-1][j]);
22         }
23     printf("%d", f[lx][ly]);
24     return 0;
25 }
完整代码

 

最长公共子序列解题报告

标签:

原文地址:http://www.cnblogs.com/formiko/p/4418209.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!