HDU 1513 && POJ 1159 Palindrome (DP+LCS+滚动数组)
题意:给定一个字符串,让你把它变成回文串,求添加最少的字符数。
析:动态规划是很明显的,就是没有了现思路,还是问的别人才知道,哦,原来要么写,既然是回文串,
那么最后正反都得是一样的,所以我们就正反求LCS,这样公共的就求出来了,那么再用总数减掉这个LCS,
那么剩下的肯定就是没有配对的了,就得必须加上了。
思路有了,这里又出现一个问题,这个求LCS,要用的空间复杂度太大了,MLE了。。。有了思路,还是过不了,
这个题应该用滚动数组来做,我想想在求LCS时,第一维我们只用到了i-1和i,所以呢,我们第二维只要开2行就够了,
不断的来回存储,第一行和第二行反复,这样就OK了,至此这个题也就解决了。
代码如下:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath> using namespace std;
const int maxn = 5000 + 10;
int d[2][maxn];
char s[maxn], t[maxn]; int main(){
int n;
while(~scanf("%d", &n)){
scanf("%s", s+1);
for(int i = 1; i <= n; ++i)
t[i] = s[n-i+1];
t[n+1] = '\0';
memset(d, 0, sizeof(d)); for(int i = 1; i <= n; ++i)
for(int j = 1; j <= n; ++j){
int x = i % 2;
int y = 1 - x;
if(s[i] == t[j]) d[x][j] = d[y][j-1] + 1;
else d[x][j] = max(d[y][j], d[x][j-1]);
} printf("%d\n", n - d[n%2][n]);
}
return 0;
}
HDU 1513 && POJ 1159 Palindrome (DP+LCS+滚动数组)的更多相关文章
- POJ 1159 回文LCS滚动数组优化
		
详细解题报告可以看这个PPT 这题如果是直接开int 5000 * 5000 的空间肯定会MLE,优化方法是采用滚动数组. 原LCS转移方程 : dp[i][j] = dp[i - 1][j] + ...
 - poj 1159 Palindrome 【LCS】
		
任意门:http://poj.org/problem?id=1159 解题思路: LCS + 滚动数组 AC code: #include <cstdio> #include <io ...
 - hdu 1513 Palindrome【LCS滚动数组】
		
链接: http://acm.hdu.edu.cn/showproblem.php?pid=1513 http://acm.hust.edu.cn/vjudge/contest/view.action ...
 - POJ 1159 Palindrome(LCS)
		
题目链接:http://poj.org/problem?id=1159 题目大意:给定一串字符,添加最少的字符,使之成为回文串. Sample Input 5 Ab3bd Sample Output ...
 - hdoj 1513 Palindrome【LCS+滚动数组】
		
Palindrome Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total ...
 - poj 1159 Palindrome(dp)
		
题目:http://poj.org/problem?id=1159 #include<iostream> #include<cstring> #include<cstdi ...
 - POJ 1159 Palindrome(区间DP/最长公共子序列+滚动数组)
		
Palindrome Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 56150 Accepted: 19398 Desc ...
 - POJ 1159 Palindrome(字符串变回文:LCS)
		
POJ 1159 Palindrome(字符串变回文:LCS) id=1159">http://poj.org/problem? id=1159 题意: 给你一个字符串, 问你做少须要 ...
 - POJ - 1159 Palindrome(dp-回文变形)
		
d.求对字符串最少添加几个字符可变为回文串. s. 法1:直接对它和它的逆序串求最长公共子序列长度len.N-len即为所求.(N为串长度) 因为,要求最少添加几个字符,我们可以先从原串中找到一个最长 ...
 
随机推荐
- UI5-文档-4.7-JSON Model
			
现在我们已经设置了视图和控制器,现在是时候考虑MVC中的M了. 我们将在app中添加一个输入字段,将它的值绑定到模型上,并将相同的值绑定到输入字段的描述上.描述将根据用户类型直接更新. Preview ...
 - Haskell语言学习笔记(33)Exception, Except, ExceptT
			
Exception class (Typeable e, Show e) => Exception e where toException :: e -> SomeException fr ...
 - 自定义worker的方法,及一例
			
自定义的worker用于处理各种特殊需求. 有网友想用html_json提取雪球网(https://xueqiu.com/)的数据,可是雪球网用了反爬虫技术,网站要求有cookies才能访问到json ...
 - Java静态初始化,实例初始化以及构造方法
			
首先有三个概念需要了解: 一.静态初始化:是指执行静态初始化块里面的内容. 二.实例初始化:是指执行实例初始化块里面的内容. 三.构造方法:一个名称跟类的名称一样的方法,特殊在于不带返回值. 我们先来 ...
 - SQL Server 2008用'sa'登录失败,启用'sa'登录的办法
			
首先”为什么用sa登录不了,提示登录失败呢?" 当然,自己装SQL Server 2008的时候根本就没有用sa登录的方法,装数据库的时候是用windows身份登录的. 如果要启用用户名为“ ...
 - 本博客已经迁移去http://blog.brightwang.com/
			
本博客已经迁移去http://blog.brightwang.com/ ,感谢各位支持.
 - JS中数组的创建方法
			
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
 - Ansible Playbook Conditionals
			
通常,play的结果可能取决于变量的值,facts(有关远程系统的知识)或先前的任务结果. 在某些情况下,变量的值可能取决于其他变量. 此外,可以创建其他组,以根据主机是否与其他条件匹配来管理主机. ...
 - mysql与redis的区别与联系
			
1.mysql是关系型数据库,主要用于存放持久化数据,将数据存储在硬盘中,读取速度较慢. redis是NOSQL,即非关系型数据库,也是缓存数据库,即将数据存储在缓存中,缓存的读取速度快,能够大大的提 ...
 - maven tomcat7 远程热部署
			
在maven项目开发中,一般推荐使用jetty进行开发调试.但是在项目发布的时候要求使用tomcat7作为发布服务器,为此在maven中配置了tomcat7插件,以支持项目在外部tomcat7进行远程 ...