UVA - 111 History Grading
2014-11-14 16:30
246 查看
题目大意:给出一个 n 代表序列中元素的个数, 然后是一个答案, 接下来是若干个同学的答案(直到文件结束为止), 求出两个序列的最长公共子序列, 注意给出的答案均是以该事件处于第几个发生的, 例如 :2 3 4 1
即是 对应第1个事件在第2个发生,第2个事件在第3个发生 ...转换一下就是 4 1 2 3
解题思路:最长公共子序列问题, 状态转移方程
0 ( i == 0 || j == 0)
d[i][j] =
d[i - 1] [j - 1] + 1 ( a[i] == b[i])
max(d[i - 1][j] , d[i] [j - 1]) ( a[i] != b[i])
#include <iostream>
using namespace std;
int main() {
int n, temp, A[25], B[25], DP[25][25] = {0};
cin >> n;
for (int i = 1; i <= n; i++) {
cin >> temp;
A[temp] = i;
}
while (cin >> temp) {
B[temp] = 1;
for (int i = 2; i <= n; i++) {
cin >> temp;
B[temp] = i;
}
for (int i = 1; i <= n; i++)
for (int j = 1; j <= n; j++)
if (A[i] == B[j])
DP[i][j] = DP[i-1][j-1] + 1;
else
DP[i][j] = max(DP[i][j-1], DP[i-1][j]);
cout << DP
<< endl;
}
return 0;
}
即是 对应第1个事件在第2个发生,第2个事件在第3个发生 ...转换一下就是 4 1 2 3
解题思路:最长公共子序列问题, 状态转移方程
0 ( i == 0 || j == 0)
d[i][j] =
d[i - 1] [j - 1] + 1 ( a[i] == b[i])
max(d[i - 1][j] , d[i] [j - 1]) ( a[i] != b[i])
#include <iostream>
using namespace std;
int main() {
int n, temp, A[25], B[25], DP[25][25] = {0};
cin >> n;
for (int i = 1; i <= n; i++) {
cin >> temp;
A[temp] = i;
}
while (cin >> temp) {
B[temp] = 1;
for (int i = 2; i <= n; i++) {
cin >> temp;
B[temp] = i;
}
for (int i = 1; i <= n; i++)
for (int j = 1; j <= n; j++)
if (A[i] == B[j])
DP[i][j] = DP[i-1][j-1] + 1;
else
DP[i][j] = max(DP[i][j-1], DP[i-1][j]);
cout << DP
<< endl;
}
return 0;
}
相关文章推荐
- 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+最长公共子序列)
- uva111 - History Grading(最长公共子序列LCS)
- 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 (by 最长公共子序列 )
- UVa 111 - History Grading 最长递增子序列 LIS
- 序列代码UVa 111 History Grading (最长公共子序列)
- UVA - 111 History Grading
- UVA 111 History Grading
- UVa 111 - History Grading (最长公共子序列)
- uva 111 History Grading
- UVa 111 - History Grading 最长递增子序列 LIS