OJ练习
1. Multiplication Puzzle:http://poj.org/problem?id=1651
2. 【该题可以转化为矩阵连乘问题】
3. Common Subsequence:http://poj.org/problem?id=1458
4. 【该题只需要输出最长公共子序列的长度】
3*. Human Gene Functions:Human Gene Functions:http://poj.org/problem?id=1080【LCS变形】
4*. Compromise:http://poj.org/problem?id=2250【LCS问题】
5*. AGTC:http://poj.org/problem?id=3356【LCS问题】
6*.完美序列:http://acm.zcmu.edu.cn/JudgeOnline/problem.php?id=1539
实验内容
1. 最长公共子序列问题(LCS)。在使用动态规划算法来求解最长公共子序列时,二维数组c[i][j]用于记录序列Xi和Yj的最长公共子序列的长度,对于序列X = {A, C, B, C, D, A, B, D}和Y = {A, B, D, C, A, B, A},绘制对应的c[i][j]。
所绘制的c[i][j]数组:
A C B C D A B D
0 0 0 0 0 0 0 0 0
A 0 1 1 1 1 1 1 1 1
B 0 1 1 2 2 2 2 2 2
D 0 1 1 2 2 3 3 3 3
C 0 1 2 3 3 3 3 3 3
A 0 1 2 2 3 3 4 4 4
B 0 1 2 3 3 3 4 5 5
A 0 1 2 3 3 3 4 5 5
- 最长公共子序列问题(LCS)。分别使用备忘录法和动态规划算法求解最长公共子序列的长度。【输入:两个字符序列;输出:两个字符序列的最长公共子序列的长度。例如:输入序列A = “ABCBDAB”,序列B = “BDCABA”;输出4】
备忘录法源代码:
#include<cstdio>
#include<cstring>
#include<queue>
#include<iostream>
#define maxn 105
#define maxm 10005
#define INF 0x3f3f3f3f
using namespace std;
char a[maxn],b[maxn];
int dp[maxn][maxn],c[maxn][maxn];