uva 111 History Grading(动态规划:LCS)

来源:互联网 发布:java命令运行jar包 编辑:程序博客网 时间:2024/06/06 04:43

水题一个

但是并不是对输入直接求LCS

输入指的是对应下标在真正序列中应该处在的位置

预处理下即可

代码如下:

#include <cstdio>#include <cstring>#include <algorithm>#define MAXN 100using namespace std;int a[MAXN], b[MAXN], dp[MAXN][MAXN];int get_lcs(int n) {    memset(dp, 0, sizeof(dp));    for(int i=1; i<=n; ++i) {        for(int j=1; j<=n; ++j) {            if(a[i] == b[j])                dp[i][j] = max(dp[i][j], dp[i-1][j-1]+1);            else dp[i][j] = max(dp[i-1][j], dp[i][j-1]);        }    }    return dp[n][n];}int main(void) {    int n, x;    scanf("%d", &n);    for(int i=1; i<=n; ++i) {        scanf("%d", &x);        a[x] = i;    }    while(scanf("%d", &x) != EOF) {        b[x] = 1;        for(int i=2; i<=n; ++i) {            scanf("%d", &x);            b[x] = i;        }        printf("%d\n", get_lcs(n));        memset(b, 0, sizeof(b));    }    return 0;}


0 0
原创粉丝点击