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

射箭解题报告

时间:2015-04-11 19:21:09      阅读:139      评论: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
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!