UVa 10066 - The Twin Towers
2014-03-12 19:45
405 查看
题目链接:UVa 10066 - The Twin Towers
简单LCS,讲解看这里。
顺带写了打印函数,题目没有要求。
简单LCS,讲解看这里。
顺带写了打印函数,题目没有要求。
#include <iostream> using namespace std; const int MAX_N = 100 + 10; int n1,n2; int arr1[MAX_N],arr2[MAX_N]; int dp[MAX_N][MAX_N]; void print() { int i = n1; int j = n2; int k = dp[i][j]; char lcs[MAX_N] = {'\0'}; //全部初始化为'\0',打印字符或者数字时候都可以用这个 //int lcs[MAX_N]; //打印数字时候可以用这个 while(i && j) { if(arr1[i-1] == arr2[j-1]) { lcs[--k] = arr1[i-1] + '0'; --i; --j; } else if(dp[i][j-1] > dp[i-1][j]) --j; else --i; } for(i = 0;i < dp[n1][n2] - 1;i++) cout << lcs[i] - '0' << " "; cout << lcs[dp[n1][n2] - 1] - '0'<< endl; //cout << lcs << endl; //如果是字符可以这么输出 } int main() { int num = 0; while(cin >> n1 >> n2,n1 + n2) { for(int i = 0;i < n1;i++) { cin >> arr1[i]; dp[i][0] = 0; } for(int i = 0;i < n2;i++) { cin >> arr2[i]; dp[0][i] = 0; } for(int i = 1;i <= n1;i++) { for(int j = 1;j <= n2;j++) { if(arr1[i - 1] == arr2[j - 1]) dp[i][j] = dp[i - 1][j - 1] + 1; else dp[i][j] = max(dp[i - 1][j],dp[i][j - 1]); } } cout << "Twin Towers #" << ++num << endl; cout << "Number of Tiles : " << dp[n1][n2] << endl; cout << endl; print(); } return 0; }
相关文章推荐
- UVa 10066: The Twin Towers
- UVA - 10066 The Twin Towers
- uva_10066 The Twin Towers
- uva 10066 - The Twin Towers
- UVA10066 - The Twin Towers
- UVA 10066 The Twin Towers
- UVa 10066 - The Twin Towers
- UVA 10066 The Twin Towers
- UVA - 10066 The Twin Towers
- uva 10066 The Twin Towers
- UVA 10066 The Twin Towers
- UVa 10066 - The Twin Towers
- UVA 10066 - The Twin Towers
- UVa:10066 The Twin Towers
- UVa 10066 The Twin Towers (DP&LCS)
- UVA 10066 - The Twin Towers
- UVA 10066 - The Twin Towers
- UVA - 10066 The Twin Towers
- UVA - 10066 The Twin Towers
- uva 10066 The Twin Towers