uva111 lcs 但是和顺序是有关的
来源:互联网 发布:翻译准确的软件 编辑:程序博客网 时间:2024/05/18 00:33
Background
Many problems in Computer Science involve maximizing some measure according to constraints.
Consider a history exam in which students are asked to put several historical events into chronological order. Students who order all the events correctly will receive full credit, but how should partial credit be awarded to students who incorrectly rank one or more of the historical events?
Some possibilities for partial credit include:
- 1 point for each event whose rank matches its correct rank
- 1 point for each event in the longest (not necessarily contiguous) sequence of events which are in the correct order relative to each other.
For example, if four events are correctly ordered 1 2 3 4 then the order 1 3 2 4 would receive a score of 2 using the first method (events 1 and 4 are correctly ranked) and a score of 3 using the second method (event sequences 1 2 4 and 1 3 4 are both in the correct order relative to each other).
In this problem you are asked to write a program to score such questions using the second method.
The Problem
Given the correct chronological order of n events as where denotes the ranking of eventi in the correct chronological order and a sequence of student responses where denotes the chronological rank given by the student to eventi; determine the length of the longest (not necessarily contiguous) sequence of events in the student responses that are in the correct chronological order relative to each other.
The Input
The first line of the input will consist of one integer n indicating the number of events with . The second line will containn integers, indicating the correct chronological order of n events. The remaining lines will each consist ofn integers with each line representing a student's chronological ordering of the n events. All lines will containn numbers in the range , with each number appearing exactly once per line, and with each number separated from other numbers on the same line by one or more spaces.
The Output
For each student ranking of events your program should print the score for that ranking. There should be one line of output for each student ranking.
Sample Input 1
44 2 3 11 3 2 43 2 1 42 3 4 1
Sample Output 1
123
Sample Input 2
103 1 2 4 9 5 10 6 8 71 2 3 4 5 6 7 8 9 104 7 2 3 10 6 9 1 5 83 1 2 4 9 5 10 6 8 72 10 1 3 8 4 9 5 7 6
Sample Output 2
65109
【题目大意】
一个历史考试,有n个历史事件, 它们之间的年份是不同的,要学生把这些事件按照正确的顺序排列出来。有两种记分方式,采用的是第二种: 假设有历史事件1,2,3,4, 它们正确的时间顺序是1,2,3,4, 然后假设学生的答案是1,3,2,4, 那么按照相对顺序正确的数量,答对了三个(1,2,4或者1,3,4),也就是它与正确答案的最长公共子序列长度是3,便是答对的数量。
【分析与总结】
最长公共子序列模板题,但是这题的输入是个很大的坑,他的输入是按照顺序,事件1是排在第几位,事件2是排在第几位......, 所以要先把输入转换成正确的顺序。
#include<iostream>#include<cstring>#include<cstdio>using namespace std;int order[25], arr[25], d[25][25];int main(){ int n, t; scanf("%d",&n);// 读入正确的答案顺序 for(int i=0; i<n; ++i) { scanf("%d",&t); order[t-1]=i+1; //放入他排名的位置 } while(~scanf("%d",&t)) { arr[t-1]=1; for(int i=1; i<n; ++i) { scanf("%d",&t); arr[t-1]=i+1; } // 求出最长公共子序列长度 memset(d, 0, sizeof(d)); for(int i=1; i<=n; ++i) for(int j=1; j<=n; ++j) { if(order[i-1]==arr[j-1]) d[i][j]=d[i-1][j-1]+1; else d[i][j]=max(d[i-1][j],d[i][j-1]); } printf("%d\n", d[n][n]); } return 0;}
- uva111 lcs 但是和顺序是有关的
- UVA111 LCS
- UVa111
- uva111
- uva111
- uva111
- 有关LCS
- uva111 - History Grading(最长公共子序列LCS)
- Activity task问题(一)现象:Activity task栈顺序,而非Activity在task中的顺序,是和最后启动的Activity有关的
- UVA10405----赤裸裸的LCS算法,但是有坑
- 有关NAT和路由之间的先后顺序
- HDU-2546 饭卡 (和放入顺序有关的01背包)
- 汉字的存放顺序和传输顺序是不一样的
- UVA111 History Grading 简单的DP
- 顺序表的有关操作
- 有关析构的顺序
- 风险种类是有关你和你的投资组合
- 下面有关malloc和new,说法错误的是?
- Xen虚拟机快照技术介绍
- Nosql知识点
- 深入Java集合学习系列:LinkedHashSet的实现原理
- ffmpeg加文字水印并控制水印显示时间或显示周期
- 如何做好年终ppt总结报告
- uva111 lcs 但是和顺序是有关的
- mongoDB的知识点
- Git学习记录
- HDOJ4857【拓扑排序】
- 剑指Offer——求1-n的和值
- windows下使用adb工具查看android程序cpu和内存消耗情况
- Java开发使用Excel批量导入数据
- 3653: 谈笑风生
- TreeSet去重字符串