首页 > 其他 > 详细

射箭解题报告

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

带权值的最长公共子序列

相当于用箭和怪建矩阵

在g[i][k]上找最长公共子序列

-2 -4 4 3 2
-1 -3 5 4 3
-7 -9 -1 -2 -3
0 -2 6 5 4

 

技术分享
f[i][k]=max(f[i][k]+g[i][k], f[i-1][k], f[i][k-1])
动规方程
技术分享
#include <stdio.h>
#define maxn 3001
int jian[maxn], guai[maxn], f[maxn][maxn];
int max(int a, int b, int c)
{
    if(b>a)    a=b;
    if(c>a)    a=c;
    return a;
}
int main()
{
    int n, m, i, k;
    scanf("%d%d", &n, &m);
    for(i=1; i<=n; i++)    scanf("%d", &jian[i]);
    for(i=1; i<=m; i++)    scanf("%d", &guai[i]);
    for(i=1; i<=n; i++)
    {
        for(k=1; k<=m; k++)
        {
            f[i][k]=max(f[i-1][k-1]+jian[i]-guai[k], f[i-1][k], f[i][k-1]);
        }
    }
    printf("%d", f[n][m]);
    return 0;
}
完整代码

最长公共子序列的动规方程

f[i][j]=max(f[i-1][j-1]+(x[i]==y[j]), f[i][j-1], f[i-1][j]);

其实这道题就是带了权值

f[i][k]=max(f[i-1][k-1]+jian[i]-guai[k], f[i-1][k], f[i][k-1]);

射箭解题报告

原文:http://www.cnblogs.com/formiko/p/4418211.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!