UVa 111 - History Grading
2013-08-26 20:35
501 查看
题目大意:有n个历史事件,需要对他们按发生的时间先后进行排名。给出正确的排名顺序和学生排出的顺序,按学生答案中最长的正确相对顺序序列的长度给分,计算学生能得多少分。如正确顺序是1,2,3,4,学生答案为1,3,2,4,学生可得三分(123和134序列均可)。
就是求两个序列的最长公共序列(LCS),经典问题,要注意的就是题中给出的是事件的排名,要转化成排名后的事件序列。
View Code
就是求两个序列的最长公共序列(LCS),经典问题,要注意的就是题中给出的是事件的排名,要转化成排名后的事件序列。
#include <cstdio> #include <cstring> #include <algorithm> using namespace std; #define MAXN 25 int correct[MAXN], query[MAXN]; int dp[MAXN][MAXN]; int main() { #ifdef LOCAL freopen("in", "r", stdin); #endif int n; scanf("%d", &n); int x; for (int i = 1; i <= n; i++) { scanf("%d", &x); correct[x] = i; } while (scanf("%d", &x) != EOF) { query[x] = 1; for (int i = 2; i <= n; i++) { scanf("%d", &x); query[x] = i; } memset(dp, 0, sizeof(dp)); for (int i = 1; i <= n; i++) for (int j = 1; j <= n; j++) { if (correct[i] == query[j]) dp[i][j] = dp[i-1][j-1] + 1; else dp[i][j] = max(dp[i-1][j], dp[i][j-1]); } printf("%d\n", dp ); } return 0; }
View Code
相关文章推荐
- UVA 111 - History Grading
- UVa Problem 111 - History Grading
- uva111 - History Grading(历史考试)
- uva 111 History Grading(LCS)
- UVA - 111 History Grading
- UVA 111 History Grading (最长公共子序列)
- 【DP】UVA 111 History Grading
- UVa 111|History Grading|动态规划|最长上升子序列
- UVA 111 History Grading(动态规划 LIS)
- (DP6.1.4.1)UVA 111 History Grading(最长递增子序列LIS 的LCS 解法)
- 【DP】UVA 111 History Grading
- 【解题报告】uva111_History Grading(历史考试, dp, LCS)
- uva 111 History Grading(最长公共子序列)
- uva 111 History Grading
- uva 111 A - History Grading
- UVA 111 History Grading
- UVa 111 - History Grading
- uva111 - History Grading (最长公共子序列)
- Uva - 111 - History Grading
- UVA 111 History Grading