uva 111(最长公共子序列)
来源:互联网 发布:语音翻译英语软件 编辑:程序博客网 时间:2024/05/13 01:05
题意:给出一个长度为n的数字序列,代表了一些历史事件的发生顺序(时间顺序),然后给出一些学生对这些历史事件进行排序的答案,如果一个学生的答案内有一个长度为x的不连续的串同样符合答案的顺序可以加分,加的分数就是x的值,输出最大的x。
题解:是个最长公共子序列问题,输入很奇葩,比如是 4 2 3 1 ,意思是事件1发生在第4位,事件2发生在第2位,事件3发生在第3位, 事件4发生在第1位,所以要转化,a[i]保存历史事件i发生的顺序位置,b[i]保存学生的答案中历史事件i发生的顺序位置,然后套用模板做就很容易了。
#include <stdio.h>#include <string.h>const int N = 25;int a[N], b[N], n, temp, f[N][N];int main() {scanf("%d", &n);for (int i = 1; i <= n; i++) {scanf("%d", &temp);a[temp] = i;}while (scanf("%d", &temp) != EOF) {b[temp] = 1;for (int i = 2; i <= n; i++) {scanf("%d", &temp);b[temp] = i;}memset(f, 0, sizeof(f));for (int i = 1; i <= n; i++) {for (int j = 1; j <= n; j++)if (a[i] == b[j])f[i][j] = f[i - 1][j - 1] + 1;elsef[i][j] = f[i][j - 1] >= f[i - 1][j] ? f[i][j - 1] : f[i - 1][j];}printf("%d\n", f[n][n]);}return 0;}
0 0
- 最长公共子序列uva--111
- uva 111(最长公共子序列)
- UVA 111 最长公共子序列(以错乱序号)
- UVA 111 History Grading 最长公共子序列
- dp 最长公共子序列 uva 111-History Grading
- UVa 111 - History Grading (最长公共子序列)
- UVa 111 History Grading (最长公共子序列)
- Uva-111 History Grading 裸最长公共子序列
- UVA-111 History Grading(dp+最长公共子序列)
- UVA - 111 History Grading 最长公共子序列
- uva 111 History Grading 最长公共子序列
- UVA 111 History Grading(最长公共子序列dp)
- UVA 111 History Grading (最长公共子序列)
- Vacation - UVa 10192 最长公共子序列
- uva 10405(最长公共子序列)
- uva 10066(最长公共子序列)
- uva 10192(最长公共子序列)
- uva 531(最长公共子序列)
- 每天一个小算法(Heapsort)
- 欢乐的《教父》创作过程
- 杭电acm2031进制转换
- ubuntu安装并远程访问mysql
- 【十大思想实验之一】电车难题
- uva 111(最长公共子序列)
- Android 仿扇形菜单实现(path)
- CSS基础4——使用CSS格式化元素内容的文本
- 内省
- fpgrowth算法的学习笔记
- osx下查看jar文件
- 怎么重新加载(刷新)页面使用jquery
- axis2之实现方式xmlbeans
- crontab命令