uva 10066(最长公共子序列)

来源:互联网 发布:淘宝长图有什么作用 编辑:程序博客网 时间:2024/06/07 00:42

题意:两个塔由两叠半径不同高度相同的瓷砖组成,要求移走一些瓷砖使两个塔一模一样且高度最高。

题解:最长公共子序列模板题。

#include <stdio.h>#include <string.h>const int N = 105;int n1, n2, d1[N], d2[N], f[N][N], t = 1;int main() {while (scanf("%d%d", &n1, &n2) && (n1 + n2)) {memset(f, 0, sizeof(f));for (int i = 1; i <= n1; i++)scanf("%d", &d1[i]);for (int i = 1; i <= n2; i++)scanf("%d", &d2[i]);for (int i = 1; i <= n1; i++)for (int j = 1; j <= n2; j++)if (d1[i] == d2[j])f[i][j] = f[i - 1][j - 1] + 1;elsef[i][j] = f[i - 1][j] >= f[i][j - 1] ? f[i - 1][j] : f[i][j - 1];printf("Twin Towers #%d\nNumber of Tiles : %d\n\n", t++, f[n1][n2]); }return 0;}


0 0
原创粉丝点击