您的位置:首页 > 其它

UVA - 10066 - The Twin Towers (动态规划, LCS)

2014-03-10 08:53 423 查看
点击打开链接

题意:给出两个塔的石头半径的序列,求最长雙子星塔的高度。即:给出两个序列,求最长公共子序列。

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
const int MAX_N = 101, MAX_M = 11, INF = 0x3f3f3f3f;
int N1, N2;
int a[MAX_N], b[MAX_N], d[MAX_N][MAX_N];
int LCS(int a[], int b[])
{
memset(d, 0, sizeof(d));
for(int i = 0; i < N1; i++)
for(int j = 0; j < N2; j++)
if(a[i] == b[j])
d[i+1][j+1] = d[i][j] + 1;
else
d[i+1][j+1] = max(d[i][j+1], d[i+1][j]);
return d[N1][N2];
}
int main()
{
//freopen("in.txt", "r", stdin);
int t = 1;
while(scanf("%d%d", &N1, &N2), N1+N2)
{
for(int i = 0; i < N1; i++) scanf("%d", a+i);
for(int i = 0; i < N2; i++) scanf("%d", b+i);
printf("Twin Towers #%d\n", t++);
printf("Number of Tiles : %d\n\n", LCS(a, b));
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  LCS 动态规划