uva 111 History Grading(lcs)
题目描述
在信息科学中有一些是关于在某些条件限制下,找出一些计算的最大值。 以历史考试来说好了,学生被要求对一些历史事件根据其发生的年代顺序来排列。所有事件顺序都正确的学生无疑的可以得满分。但是那些没有全对的人又该如何给分呢?以下有2种可能的给分方式: 1. 每个与标准答案的顺序相同的事件得1分 2. 每个在最长(但不一定要连续)的序列事件中,其相对的顺序亦可以在标准答案发现者,每个事件得1分。 举例说明:如果有4个事件其发生时间的顺序依次是1 2 3 4(就是标准答案啦,意思是第1个事件发生顺序为1,第2个事件发生的顺序为2,......)。所以如果学生回答此4个事件发生的顺序依次是1 3 2 4的话,根据上面第1种方法可以得2分(第1个及第4个事件)。但是如果以上面第2种方法可以得3分(1 2 4或者1 3 4其相对的顺序可以在标准答案发现) 在本问题中,请你写一个程序以第2个方法算出学生该得多少分。
Input
只考一次试,所以输入的第1列有一个整数n(2 <= n <= 20)代表此次历史考试有多少个事件要排序。第2列为标准答案,有n个正整数c1,c2,......cn,(其内容为1到n的某种排列),c1代表第1个事件发生的顺序,c2代表第2个事件发生的顺序,依此类推。 从第3列开始每列为一学生的答案,每列有n个正整数r1,r2,......rn,(其内容亦为1到n的某种排列),r1代表学生回答第1个事件发生的顺序,r2代表学生回答第2个事件发生的顺序,依此类推。
Output
对每一学生的答案,输出其所得的分数。
Sample Input
10
3 1 2 4 9 5 10 6 8 7
1 2 3 4 5 6 7 8 9 10
4 7 2 3 10 6 9 1 5 8
3 1 2 4 9 5 10 6 8 7
2 10 1 3 8 4 9 5 7 6
Sample Output
6
5
10
9
由于是求事件的最长公共子序列,而输入的是时间,所以要处理下
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std; const int MAXN = ; int dp[MAXN][MAXN]; int main()
{ int n;
int c[MAXN];
int r[MAXN];
int i, j;
int t; while (~scanf("%d", &n)) {
for (i = ; i <= n; ++i) {
scanf("%d", &t);
c[t] = i;
}
while (~scanf("%d", &t)) {
r[t] = ;
for (i = ; i <= n; ++i) {
scanf("%d", &t);
r[t] = i;
}
memset(dp, , sizeof(dp));
for (i = ; i <= n; ++i) {
for (j = ; j <= n; ++j) {
if (c[i] == r[j]) {
dp[i][j] = dp[i - ][j - ] + ;
} else {
dp[i][j] = max(dp[i - ][j], dp[i][j - ]);
}
}
}
printf("%d\n", dp[n][n]);
}
} return ;
}
好像可以转化为求最长上升子序列来做,
http://www.cnblogs.com/jusonalien/p/4060871.html
uva 111 History Grading(lcs)的更多相关文章
- UVa 111 History Grading (简单DP,LIS或LCS)
题意:题意就是坑,看不大懂么,结果就做不对,如果看懂了就so easy了,给定n个事件,注意的是, 它给的是第i个事件发生在第多少位,并不是像我们想的,第i位是哪个事件,举个例子吧,4 2 3 1, ...
- uva 111 - History Grading (dp, LCS)
题目链接 题意:给N,第二行是答案,n个数c1---cn, 代表第一个的顺序是c1,第二个数顺序是c2; 下面每一行是学生的答案,格式同上. 注意:这个给的顺序需要处理一下,不能直接用. 思路:LCS ...
- uva 111 History Grading(最长公共子序列)
题目连接:111 - History Grading 题目大意:给出一个n 代表序列中元素的个数, 然后是一个答案, 接下来是若干个同学的答案(直到文件结束为止), 求出两个序列的最长公共子序列, 注 ...
- UVa 111 - History Grading (by 最长公共子序列 )
History Grading Background Many problems in Computer Science involve maximizing some measure accor ...
- UVA 111 History Grading
读题读了好久,其实就是在输入数据时要对数据的位置进行相应的改变 #include<iostream> #include<cstring> #include<cstdio& ...
- UVA - 10723 Cyborg Genes (LCS)
题目: 思路: 求两个串的最长公共子序列,则这个最短的串就是给出的两个串的长度和减去最长公共子序列的长度. 状态转移方程: 如果s[i-1]==t[j-1]就有dp[i][j] = dp[i-1][j ...
- 【实习记】2014-08-29算法学习Boyer-Moore和最长公共子串(LCS)
昨天的问题方案一:寻找hash函数,可行性极低.方案二:载入内存,维护成一个守护进程的服务.难度比较大.方案三:使用前5位来索引,由前3位增至前5位唯一性,理论上是分拆记录扩大100倍,但可以 ...
- CJOJ 1071 【Uva】硬币问题(动态规划)
CJOJ 1071 [Uva]硬币问题(动态规划) Description 有n种硬币,面值分别为v1, v2, ..., vn,每种都有无限多.给定非负整数S,可以选用多少个硬币,使得面值之和恰好为 ...
- 动态规划法(十)最长公共子序列(LCS)问题
问题介绍 给定一个序列\(X=<x_1,x_2,....,x_m>\),另一个序列\(Z=<z_1,z_2,....,z_k>\)满足如下条件时称为X的子序列:存在一个严格 ...
随机推荐
- start with git
Start with git 1.what is GitHub? GitHub is a code hosting platform for version control and collabora ...
- 【一键激活win8.1系统】
下载激活工具地址: 链接:https://pan.baidu.com/s/1AUaQQRcqfCYWK94KapYjjA 密码:i4sk 下载后,右键单击“以管理员身份运行”Microsoft Too ...
- 设计模式之前之UML
UML,让系统可视化,让规格和设计文档化的表现方法.下面来简单介绍一下这个UML.
- parse arguments in bash
There are lots of ways to parse arguments in sh. Getopt is good. Here's a simple script that parses ...
- Tkinter 控件详细介绍
Tkinter 控件详细介绍 1.Button 按钮.类似标签,但提供额外的功能,例如鼠标掠过.按下.释放以及键盘操作/事件 2.Canvas 画布.提供绘图功能(直线.椭圆.多边形.矩形) ;可以包 ...
- C语言基础知识【环境设置】
直接使用绿色版的VC++6.0就ok,后期我会写一个具体的使用教程
- vue组件父子组件之间传递数据
举个栗子: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF ...
- python(pytest)+allure+jenkins 实现接口自动化的思路
效果图镇楼: 上述各模块作用: python(pytest): 1:用于读测试用例(本次用例写在csv文件中) 2:环境配置相关 3:提取1中的测试数据,组成请求体 4:发送请求 5:获取结果 6:断 ...
- 2017-2018-1 20179209《Linux内核原理与分析》第十周作业
设备与模块 设备分类 块设备 块设备可以以块为单位寻址,块大小随设备不同而不同:设备通常支持重定位操作,也就是对数据的随机访问.块设备的例子有外存,光盘等. 字符设备 字符设备不可寻址,仅供数据的流式 ...
- MySQL——视图
核心知识点: 1.视图定义 2.视图的好处:安全.节约资源.操作简单,数据的同一性 3.视图的基本操作 一.视图概论 视图是一个虚拟表,其内容由查询定义. 同真实的表一样,视图包含一系列带有名称的列和 ...