UVa 111 - History Grading
2012-11-20 21:27
399 查看
题目:最大公共子序列。
分析:dp、LIS或LCS。最大上升子序列或最大公共子序列。当元素不重复时LCS可以转化为LIS,对应B序列每个元素转化为在A序列中的位置,求转化后序列的LIS即为两序列的LCS、可以用单调队列优化为O(nlogn)。
注意:输入给的是元素对应的顺序号需要转换、输入时使用while( cin )会导致WA。
LCS:
分析:dp、LIS或LCS。最大上升子序列或最大公共子序列。当元素不重复时LCS可以转化为LIS,对应B序列每个元素转化为在A序列中的位置,求转化后序列的LIS即为两序列的LCS、可以用单调队列优化为O(nlogn)。
注意:输入给的是元素对应的顺序号需要转换、输入时使用while( cin )会导致WA。
LCS:
#include <iostream> #include <cstdlib> #include <cstring> using namespace std; int map[ 35 ]; int dat[ 35 ]; int len[ 35 ][ 35 ]; int main() { int n,temp;cin >> n; for ( int i = 1 ; i <= n ; ++ i ) { cin >> temp; map[temp] = i; } while ( cin >> temp ) { dat[temp] = 1; for ( int i = 2 ; i <= n ; ++ i ) { cin >> temp; dat[temp] = i; } memset( len, 0, sizeof(len) ); for ( int i = 1 ; i <= n ; ++ i ) for ( int j = 1 ; j <= n ; ++ j ) if ( map[i] == dat[j] ) len[i][j] = len[i-1][j-1]+1; else len[i][j] = max(len[i-1][j],len[i][j-1]); cout << len << endl; } return 0; }LIS:
#include <iostream> #include <cstdlib> #include <cstring> using namespace std; int map[ 25 ]; int len[ 25 ]; int dat[ 25 ]; int main() { int n,temp;cin >> n; for ( int i = 1 ; i <= n ; ++ i ) cin >> map[i]; while ( cin >> temp ) { dat[temp] = 1; for ( int i = 2 ; i <= n ; ++ i ) { cin >> temp; dat[temp] = i; } int max = 0; for ( int i = 1 ; i <= n ; ++ i ) { len[i] = 1; for ( int j = 1 ; j < i ; ++ j ) if ( map[dat[j]] < map[dat[i]] && len[i] <= len[j] ) len[i] = len[j]+1; if ( max < len[i] ) max = len[i]; } cout << max << endl; } 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 (简单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
- UVA - 111 History Grading
- UVA 111 History Grading(题意杀,最长公共子序列)
- 序列代码UVa 111 History Grading (最长公共子序列)
- uva 111 History Grading(DP初步应用)
- uva 111 History Grading(lcs)
- UVa 111 - History Grading (最长公共子序列)
- UVA 111 History Grading