poj 2250 Compromise(区间dp)
题目链接:http://poj.org/problem?id=2250
思路分析:最长公共子序列问题的变形,只是把字符变成了字符串,按照最长公共子序列的思路即可以求解。
代码如下:
#include <stdio.h>
#include <string.h> #define IsEqual(a, b) strcmp((a), (b)) == 0
enum { Left, Up, UpAndLeft };
int XLen, YLen;
const int MAX_N = + ;
char X[MAX_N][], Y[MAX_N][];
int dp[MAX_N][MAX_N], r[MAX_N][MAX_N]; void PrintWords(int i, int j)
{
if (i == || j == )
return; if (r[i][j] == UpAndLeft)
{
PrintWords(i - , j - ); if (i == XLen && j == YLen)
printf("%s",X[i]);
else
printf("%s ", X[i]);
}
else
if (r[i][j] == Up)
PrintWords(i - , j);
else
PrintWords(i, j - );
} void Lcs( int XLen, int YLen )
{
for (int i = ; i <= XLen; ++i)
dp[i][] = ;
for (int j = ; j <= YLen; ++j)
dp[][j] = ; for (int i = ; i <= XLen; ++i)
for (int j = ; j <= YLen; ++j)
{
if (IsEqual(X[i], Y[j]))
{
dp[i][j] = dp[i - ][j - ] + ;
r[i][j] = UpAndLeft;
}
else
if (dp[i - ][j] >= dp[i][j - ])
{
dp[i][j] = dp[i - ][j];
r[i][j] = Up;
}
else
{
dp[i][j] = dp[i][j - ];
r[i][j] = Left;
}
}
} int main()
{
XLen = YLen = ; while (scanf("%s", X[XLen]) != EOF)
{
memset(dp, , sizeof(dp));
memset(r, -, sizeof(r)); while ()
{
scanf("%s", X[++XLen]);
if (strcmp("#", X[XLen]) == )
{
XLen--;
break;
}
} while ()
{
scanf("%s", Y[YLen++]);
if (strcmp("#", Y[YLen - ]) == )
{
YLen -= ;
break;
}
} Lcs(XLen, YLen);
PrintWords(XLen, YLen);
printf("\n");
XLen = YLen = ;
} return ;
}
poj 2250 Compromise(区间dp)的更多相关文章
- POJ 2250 Compromise(LCS)
POJ 2250 Compromise(LCS)解题报告 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=87125#proble ...
- POJ 2995 Brackets 区间DP
POJ 2995 Brackets 区间DP 题意 大意:给你一个字符串,询问这个字符串满足要求的有多少,()和[]都是一个匹配.需要注意的是这里的匹配规则. 解题思路 区间DP,开始自己没想到是区间 ...
- POJ 1179 - Polygon - [区间DP]
题目链接:http://poj.org/problem?id=1179 Time Limit: 1000MS Memory Limit: 10000K Description Polygon is a ...
- POJ 1160 经典区间dp/四边形优化
链接http://poj.org/problem?id=1160 很好的一个题,涉及到了以前老师说过的一个题目,可惜没往那上面想. 题意,给出N个城镇的地址,他们在一条直线上,现在要选择P个城镇建立邮 ...
- POJ 1390 Blocks(区间DP)
Blocks [题目链接]Blocks [题目类型]区间DP &题意: 给定n个不同颜色的盒子,连续的相同颜色的k个盒子可以拿走,权值为k*k,求把所有盒子拿完的最大权值 &题解: 这 ...
- poj 2955"Brackets"(区间DP)
传送门 https://www.cnblogs.com/violet-acmer/p/9852294.html 题意: 给你一个只由 '(' , ')' , '[' , ']' 组成的字符串s[ ], ...
- POJ 1159 Palindrome(区间DP/最长公共子序列+滚动数组)
Palindrome Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 56150 Accepted: 19398 Desc ...
- HOJ 1936&POJ 2955 Brackets(区间DP)
Brackets My Tags (Edit) Source : Stanford ACM Programming Contest 2004 Time limit : 1 sec Memory lim ...
- IOI 98 (POJ 1179)Polygon(区间DP)
很容易想到枚举第一步切掉的边,然后再计算能够产生的最大值. 联想到区间DP,令dp[i][l][r]为第一步切掉第i条边后从第i个顶点起区间[l,r]能够生成的最大值是多少. 但是状态不好转移,因为操 ...
随机推荐
- c/c++处理参数
直接上代码:涉及函数getopt(),getopt_long() #include <unistd.h> #include <stdlib.h> #include <st ...
- 新浪微博 2.4sdk 一闪而过
解决方法,保持 ios应用中的 build id和 开放平台中填写的一致
- POJO概念
POJO是一个简单的普通的Java对象,它不包含业务逻辑或持久逻辑等,但不是JavaBean.EntityBean等,不具有任何特殊角色和不继承或不实现任何其它Java框架的类或接口.
- UVa1368/ZOJ3132 DNA Consensus String
#include <stdio.h>#include <string.h> int main(){ int a[4][1000]; // A/C/G/T在每列中出现的次数 ...
- 【Cocos2D-x 3.5实战】坦克大战(1)环境配置
前言: 最近课比较少,空闲时间比较多,一有时间就东想西想,想着想着就突然想到做手机游戏(android)了,学习下CoCos2d.看了一些CoCos2D的相关文档和教程,觉得是时候实战了,但是苦于没有 ...
- C++对象模型--总结
http://c.biancheng.net/cpp/biancheng/view/239.html 博客园有关C++内存布局,对象模型的文章. Effective C++ 绝不重写non-virtu ...
- quartz 定时调度持久化数据库配置文件
1 下载quartz对应版本jar包 2 初始化对应数据库sql(版本需要对应,不然会出现少字段的情况) ,下载地址 https://github.com/quartz-scheduler/quar ...
- python自学笔记(六)二进制与位移
一.二进制 a = 1 bin(a)-->ob1 #python内置方法 ob 表示二进整型制格式 二.难缠符号 1.位移二进制的位 >> 右位移,想象成 切肉切去最后一位 例如 ...
- artdialog的图片,标题,以及关闭按钮不显示的问题
因其它css样式文件中包含“div{ overflow:hidden; }”引起的artdialog的图片,标题,以及关闭按钮不显示的问题: 如下图: 解决办法:在artdialog的样式文件顶部添加 ...
- 如何设计一个 iOS 控件?(iOS 控件完全解析)
前言 一个控件从外在特征来说,主要是封装这几点: 交互方式 显示样式 数据使用 对外在特征的封装,能让我们在多种环境下达到 PM 对产品的要求,并且提到代码复用率,使维护工作保持在一个相对较小的范围内 ...