UVA 111 History Grading
2011-11-02 20:06
183 查看
UVA_111
这个题目并不困难,但是题意理解起来很蛋疼。
题目的意思是求两个事件序列的最长公共子序列,而题目中输入的是每个事件发生的时间,因而要先根据每个事件发生的时间把事件的序列的找到。
比如如果输入是1 3 4 2,那么实际上事件序列是1 4 2 3。
这个题目并不困难,但是题意理解起来很蛋疼。
题目的意思是求两个事件序列的最长公共子序列,而题目中输入的是每个事件发生的时间,因而要先根据每个事件发生的时间把事件的序列的找到。
比如如果输入是1 3 4 2,那么实际上事件序列是1 4 2 3。
#include<stdio.h> #include<string.h> #define MAXD 30 int N, a[MAXD], b[MAXD], f[MAXD][MAXD]; int init() { int i, k; for(i = 1; i <= N; i ++) { if(scanf("%d", &k) != 1) return 0; b[k] = i; } return 1; } void solve() { int i, j; memset(f, 0, sizeof(f)); for(i = 1; i <= N; i ++) for(j = 1; j <= N; j ++) { f[i][j] = f[i - 1][j]; if(f[i][j - 1] > f[i][j]) f[i][j] = f[i][j - 1]; if(a[i] == b[j] && f[i - 1][j - 1] + 1 > f[i][j]) f[i][j] = f[i - 1][j - 1] + 1; } printf("%d\n", f ); } int main() { int i, k; scanf("%d", &N); for(i = 1; i <= N; i ++) { scanf("%d", &k); a[k] = i; } while(init()) solve(); return 0; }
相关文章推荐
- UVA 111 History Grading
- Uva 111 – History Grading
- UVA 111 History Grading
- UVa 111 - History Grading
- Uva-111 History Grading 裸最长公共子序列
- UVa 111 History Grading (最长公共子序列)
- uva 111 History Grading
- UVA 111 History Grading(dp + LCS)
- UVA 111 - History Grading(动态规划)
- UVa 111: History Grading
- uva 111 History Grading
- uva 111 History Grading(动态规划——最长公共子序列)
- UVa 111 History Grading (简单DP,LIS或LCS)
- uva-111 G - History Grading
- UVA - 111 History Grading
- uva 111 - History Grading (dp, LCS)
- UVa 111 - History Grading
- UVA 111 History Grading
- UVA - 111 History Grading
- UVa 111 - History Grading 最长递增子序列 LIS