hdu 1159 Palindrome(回文串) 动态规划
题意:输入一个字符串,至少插入几个字符可以变成回文串(左右对称的字符串)
分析:f[x][y]代表x与y个字符间至少插入f[x][y]个字符可以变成回文串,可以利用动态规划的思想,求解
状态转化方程:
f[x][y]=0 初始化
f[x][y]=f[x+1][y-1] s[x]==s[y]时
f[x][y]=MIN ( f[x+1][y] , f[x][y-1] )+1 s[x] != s[y]时
代码展示
一开始没有将算的的数据存放到数组中,使得有些数据重复计算好多次,TLE 。 f[x][y]可以记录值
空间复杂度挺高的,f数组仅仅用到一半的存储空间,可以通过x与y计算,将二维数组转换成一维数组 f[(max+1)*max/2]
// hdu 1159 Palindrome 49392K 1797MS
#include<iostream>
#include<cstdio>
#define MIN(a,b) ((a)>(b)?(b):(a))
using namespace std;
char s[];
short f[][];//存放区间内插入最小字符个数
int result(int be, int fi)
{
if(f[be][fi]!=-)return f[be][fi]; //已求出最小值
else if(be>=fi)return ; //代表结束
else if(s[be] == s[fi]) return f[be][fi] = result(be+,fi-);
else
{
int t1 = result(be,fi-);
int t2 = result(be+,fi);
return f[be][fi]=MIN(t1,t2)+;
}
}
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
for(int i=; i<=n; i++)
cin >> s[i];
memset(f,-,sizeof(f));
cout << result(,n)<<endl;
}
return ;
}
经典典型动态规划代码(没有重复计算)每次计算用到的数据都是前面计算得到的结果,没有冗余
对于计算结果f[x][y] 由于计算结果总是与f[x+1][y-1]、f[x+1][y]、f[x][y-1]三个变量有关联 因而 x 从后往前开始循环,y从x向后开始循环
// hdu 1159 Palindrome 40708K 344MS
#include<iostream>
#include<cstdio>
#define MIN(a,b) ((a)>(b)?(b):(a))
using namespace std;
char s[];
short f[][];
int main()
{
int n,i,j;
while(cin >> n >> s+)
{
for(i=n; i>0; i--)
for(j=i+1; j<=n; j++)
if(s[i] == s[j]) f[i][j]=f[i+1][j-1];
else f[i][j] = MIN(f[i+1][j], f[i][j-1])+1;
cout << f[][n] << endl;
}
return ;
}
hdu 1159 Palindrome(回文串) 动态规划的更多相关文章
- HDU 5651 计算回文串个数问题(有重复的全排列、乘法逆元、费马小定理)
原题: http://acm.hdu.edu.cn/showproblem.php?pid=5651 很容易看出来的是,如果一个字符串中,多于一个字母出现奇数次,则该字符串无法形成回文串,因为不能删减 ...
- poj 1159 dp回文串
题意:添加最少的字符使之成为回文串 #include<cstdio> #include<iostream> #include<algorithm> #include ...
- 洛谷T89644 palindrome回文串
洛谷 T89643 回文串(并查集) 洛谷:https://www.luogu.org/problem/T89643 题目描述 由于 Kiana 实在是太忙了,所以今天的题里面没有 Kiana. 有一 ...
- 1159 Palindrome(最小插入回文串)
标题效果 定的字符串长度的串和内容.中的字符可以在任何位置被插入.它至少需要为数字,这使得编程回文串串. 回文序列从左至右,从右到左和读取相同. 例如. aaaacbbbb它是一个回文串 aaab前面 ...
- HDU 4632 Palindrome subsequence(区间dp,回文串,字符处理)
题目 参考自博客:http://blog.csdn.net/u011498819/article/details/38356675 题意:查找这样的子回文字符串(未必连续,但是有从左向右的顺序)个数. ...
- [LeetCode] Palindrome Partitioning II 拆分回文串之二
Given a string s, partition s such that every substring of the partition is a palindrome. Return the ...
- (回文串 )Best Reward -- hdu -- 3613
http://acm.hdu.edu.cn/showproblem.php?pid=3613 Best Reward Time Limit: 2000/1000 MS (Java/Others) ...
- 集训第五周动态规划 H题 回文串统计
Hrdv is interested in a string,especially the palindrome string.So he wants some palindrome string.A ...
- 集训第五周动态规划 G题 回文串
Description A palindrome is a symmetrical string, that is, a string read identically from left to ri ...
随机推荐
- 23种设计模式全解析 (java版本)
转自:http://blog.csdn.net/longyulu/article/details/9159589 其中PHP常用的五种设计模式分别为:工厂模式,单例模式,观察者模式,策略模式,命令模式 ...
- 默认时,销毁会话,session_unset, session_destory
<?php /** 一般我们登录时,开启了会话,就会自动生成 session 有关的文件, 保存有相关的用户登录信息,所以正常情况下得退出登录, 同时也要清空 session 有关的文件和相关的 ...
- 读取xml文件(可执行文件根目录debug)
xml文件格式如下 <?xml version="1.0" encoding="utf-8" ?> <root> <appKey& ...
- input多选图片与显示
input标签 在使用input选择文件时遇到了 在遍历input file.files 只显示最后一个,修改如下: CSS: <style type="text/css"& ...
- 文字以及div水平垂直居中
文字以及div水平垂直居中.md <div class=”content”> <div class=”mydiv”> huangyingnin! </div>< ...
- linux下 链接 sqlserver数据库 驱动的安装
1.必需安装freetds 安装pdo_dblib扩展首先需要安装freetds. freeTDS的最新稳定版是0.91,这个可以在官网上下载http://www.freetds.org/ ,也可以在 ...
- mysqli_fetch_assoc与mysqli_result::fetch_assoc区别
mysqli_fetch_assoc与mysqli_result::fetch_assoc区别
- php获取文件mime类型Fileinfo等方法
前几天写到使用wordpress xmlrpc api远程发布文章,如果本地服务器的文章库里某一篇待发表的wordpress文章包含图片文件时,就会使用到WordPress上传文件的API metaW ...
- Python 手册(一)
Python 手册 Guido van Rossum Fred L. Drake, Jr., editor PythonLabs Email: python-docs@python.org Rele ...
- Poco之ftp目录切换与创建
TEMPLATE = app QT += qml quick widgets#LIBS += -lPocoFoundation -lPocoXML -lPocoNetSOURCES += main.c ...