POJ2250 Compromise(dp)
来源:互联网 发布:xp仿苹果mac界面主题 编辑:程序博客网 时间:2024/03/29 00:15
题目链接:点击打开链接
给出两段字符串数组, 每段以"#"结尾, 要求输出两段字符串数组最长的公共字符串.
lcs题目, 增加了一个flag数组保存字符串比较结果, 用于最后递归数据答案.
AC代码:
#include "iostream"#include "cstdio"#include "cstring"#include "algorithm"using namespace std;const int MAXN = 105;char s1[MAXN][MAXN], s2[MAXN][MAXN];int dp[MAXN][MAXN], flag[MAXN][MAXN], len1, len2;void lcs(){for(int i = 1; i <= len1; ++i)for(int j = 1; j <= len2; ++j) {if(strcmp(s1[i - 1], s2[j - 1]) == 0) {dp[i][j] = dp[i - 1][j - 1] + 1;flag[i][j] = 1;}else {if(dp[i - 1][j] >= dp[i][j - 1]) {flag[i][j] = 2;dp[i][j] = dp[i - 1][j];}else {flag[i][j] = 3;dp[i][j] = dp[i][j - 1];}}}}void print(int x, int y){if(!x || !y) return;if(flag[x][y] == 1) {print(x - 1, y - 1);printf("%s ", s1[x - 1]);}else if(flag[x][y] == 2) print(x - 1, y);else print(x, y - 1);}int main(int argc, char const *argv[]){while(scanf("%s", s1[0]) != EOF) {for(len1 = 1; ; ++len1) {scanf("%s", s1[len1]);if(strcmp(s1[len1], "#") == 0) break;}for(len2 = 0; ; ++len2) {scanf("%s", s2[len2]);if(strcmp(s2[len2], "#") == 0) break;}lcs();print(len1, len2);printf("\n");}return 0;}
1 0
- POJ2250 Compromise,map、dp
- POJ2250 Compromise(dp)
- poj2250 Compromise dp lcs 记录路径
- POJ2250 Compromise DP最长公共子序列
- poj2250 - Compromise
- 【POJ2250】Compromise (最长公共子序列,DP)
- POJ2250---Compromise(dp,最长公共子序列,输出路径)
- POJ2250:Compromise(LCS)
- POJ2250:Compromise(LCS)
- POJ2250——Compromise
- POJ2250 Compromise (LCS)
- POJ2250 Compromise (LCS)
- 【DP】poj2250
- POJ2250(compromise) 解题报告
- POJ2250 & UVA 531 Compromise(字符串、 最长公共子序列)
- poj2250
- POJ2250
- poj2250
- 机器学习算法中如何选取超参数:学习速率、正则项系数、minibatch size
- ocp-402
- 框架培训-第五日
- 网络状态正常无法联网解决问题(奇葩问题)
- ocp-403
- POJ2250 Compromise(dp)
- Android中aidl基础
- 查看hive版本
- ocp-404
- ocp-405
- ocp-406
- LPC2220调试JATA错误
- 一根绳子
- ocp-407