集训第五周动态规划 G题 回文串
As an example, by inserting 2 characters, the string "Ab3bd" can be transformed into a palindrome ("dAb3bAd" or "Adb3bdA"). However, inserting fewer than 2 characters does not produce a palindrome.
Input
Output
Sample Input
5
Ab3bd
Sample Output
2 这道题类似于编辑距离,使用动态规划可解: 用dp(i,j)表示数组从i到j的这个区间形成的子串,使其成为回文串需要加入最小的字符个数 那么动态规划方程为
1.min(dp(i+1,j)+1,dp(i,j-1)+1) (a[i]!=a[j])
dp(i,j)={
2.dp(i+1,j-1) (a[i]=a[j]) 这道题由于n最大可达5000,因此使用int型的二维数组会超空间,可以把int型改成short型,同时也可以使用滚动数组,因为这个状态转移方程是在两个相邻的
状态之间转变,因此使用两行一列的数组就完全可以存下,而且这个DP也类似于递推,由已知推未知,本就用不到那么多的空间,可以覆盖掉那些没用的,只保存有用的就行。
#include"iostream"
#include"cstring"
using namespace std;
const int maxn=5010;
char a[maxn];
int dp[2][maxn],n;
void Init()
{
for(int i=1;i<=n;i++) {cin>>a[i];}
memset(dp,0,sizeof(dp));
}
void Work()
{
for(int i=n-1;i>=1;i--)
{
for(int j=i+1;j<=n;j++)
{
if(a[i]==a[j])
dp[i%2][j]=dp[(i+1)%2][j-1];
else
dp[i%2][j]=min(dp[(i+1)%2][j],dp[i%2][j-1])+1;
}
}
}
void Print()
{
cout<<dp[1][n]<<endl;
}
int main()
{
while(cin>>n)
{
Init();
Work();
Print();
}
return 0;
}
#include"iostream"
#include"cstring"
using namespace std; const int maxn=;
char a[maxn];
short dp[maxn][maxn],n; void Init()
{ for(int i=;i<=n;i++) {cin>>a[i];}
memset(dp,0x3f,sizeof(dp));
} void Work()
{
for(int i=;i<=n;i++) {dp[i][i]=;dp[i+][i]=;}
for(int i=n-;i>=;i--)
{
for(int j=i+;j<=n;j++)
{
if(a[i]==a[j])
dp[i][j]=dp[i+][j-];
else
dp[i][j]=min(dp[i+][j],dp[i][j-])+;
}
}
} void Print()
{
cout<<dp[][n]<<endl;
} int main()
{
while(cin>>n)
{
Init();
Work();
Print();
}
return ;
}
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
const int maxn=+;
char a[maxn];
short dp[maxn][maxn];
int main()
{
int n;
while(cin>>n)
{
memset(dp,0x3f,sizeof(dp));
for(int i=;i<=n;i++) cin>>a[i];
for(int i=;i<=n;i++)
{
dp[i-][i]=;
dp[i][i]=;
}
for(int i=;i<=n;i++)
for(int j=i-;j>=;j--)
{
if(a[i]==a[j]) dp[i][j]=dp[i-][j+];
else dp[i][j]=min(dp[i-][j]+,dp[i][j+]+);
}
cout<<dp[n][]<<endl;
}
return ;
}
集训第五周动态规划 G题 回文串的更多相关文章
- 集训第五周动态规划 H题 回文串统计
Hrdv is interested in a string,especially the palindrome string.So he wants some palindrome string.A ...
- 集训第五周动态规划 D题 LCS
Description In a few months the European Currency Union will become a reality. However, to join the ...
- 集训第五周动态规划 C题 编辑距离
Description Let x and y be two strings over some finite alphabet A. We would like to transform x int ...
- 集训第五周 动态规划 B题LIS
Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit Status Des ...
- 集训第五周动态规划 I题 记忆化搜索
Description Michael喜欢滑雪百这并不奇怪, 因为滑雪的确很刺激.可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你.Michael想知道 ...
- 集训第五周动态规划 F题 最大子矩阵和
Given a two-dimensional array of positive and negative integers, a sub-rectangle is any contiguous s ...
- 集训第五周 动态规划 K题 背包
K - 背包 Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit Statu ...
- 集训第五周动态规划 J题 括号匹配
Description We give the following inductive definition of a “regular brackets” sequence: the empty s ...
- 集训第五周动态规划 E题 LIS
Description The world financial crisis is quite a subject. Some people are more relaxed while others ...
随机推荐
- flask框架路由系统
flask框架的url系统: flask框架的路由系统: flask框架的路由系统使用实例化的route方法来指定: 如: @app.route('/') route函数装饰器可以把一个函数绑定到对应 ...
- Django models模型
Django models模型 一. 所谓Django models模型,是指的对数据库的抽象模型,models在英文中的意思是模型,模板的意思,在这里的意思是通过models,将数据库的借口抽象成p ...
- [SDOI2016]墙上的句子
题目描述 考古学家发现了一堵写有未知语言的白色墙壁,上面有一个n行m列的格子,其中有些格子内被填入了某个A至Z的大写字母,还有些格子是空白的. 一直横着或竖着的连续若干个字母会形成一个单词,且每一行的 ...
- Poj 1743 Musical Theme (后缀数组+二分)
题目链接: Poj 1743 Musical Theme 题目描述: 给出一串数字(数字区间在[1,88]),要在这串数字中找出一个主题,满足: 1:主题长度大于等于5. 2:主题在文本串中重复出现 ...
- Permutation UVA - 11525(值域树状数组,树状数组区间第k大(离线),log方,log)(值域线段树第k大)
Permutation UVA - 11525 看康托展开 题目给出的式子(n=s[1]*(k-1)!+s[2]*(k-2)!+...+s[k]*0!)非常像逆康托展开(将n个数的所有排列按字典序排序 ...
- Oracle报错:"ORA-18008: 无法找到 OUTLN 方案 "的解决方案
Oracle报错:"ORA-18008: 无法找到 OUTLN 方案 "的解决方案 今天连接到Oracle报错:ORA-18008: 无法找到 OUTLN 方案,前天还用得 ...
- 221 Maximal Square 最大正方形
在一个由0和1组成的二维矩阵内,寻找只包含1的最大正方形,并返回其面积.例如,给出如下矩阵:1 0 1 0 01 0 1 1 11 1 1 1 11 0 0 1 0返回 4. 详见:https://l ...
- 掌握Spark机器学习库-07-回归算法原理
1)机器学习模型理解 统计学习,神经网络 2)预测结果的衡量 代价函数(cost function).损失函数(loss function) 3)线性回归是监督学习
- VM virtualBox网络地址设置
目的:在虚拟机LINUX中,可用通过主机访问到虚机内容. 问题描述,在虚机系统中,ip地址一直为127.0.0.1,无法在主机中建立连接 参考文章:https://cnzhx.net/blog/vir ...
- python学习日记-01
一. 熟悉 在正式介绍python之前,了解下面两个基本操作对后面的学习是有好处的: (1)基本的输入输出 可以在Python中使用+.-.*./直接进行四则运算. >>> 1+3* ...