2016暑期集训1B 构造回文字符串
2016-08-10 21:13
267 查看
构造回文字符串
时间限制: 1 Sec 内存限制: 128 MB题目描述
一个字符串是回文字符串当且仅当这个字符串从左向右读和从右向左读是一样的,比如:aba, cddc。
现在给定一个字符串,问你,最少添加多少个字符,可以使得字符串变成回文字符串。样例中Ab3bd最少添加2个字符串,如Adb3bdA。
输入
第一行输入字符串长度n
第二行输入字符串,仅由字母和数字构成
输出
输出最少添加字符个数
样例输入
5
Ab3bd
样例输出
2
提示
【数据规模和约定】
50%数据 3<=n<=500
100%数据 3<=n<=5000
这是一道比较明显的DP题
f[i,j]表示i到j区间的最小修改次数
若a[i]=a[j] f[i,j]=f[i+1,j-1]
否则 f[i,j]=min(f[i+1,j],f[i,j-1])+1
附上代码
#include<cstdio> #include<iostream> #include<algorithm> using namespace std; int n; char s[5005]; int f[5005][5005]; int main(){ scanf("%d",&n); scanf("%s",s+1); for (int i=1;i<=n;i++){ f[i][i]=0; } for (int i=1;i<=n-1;i++){ if (s[i]==s[i+1]) f[i][i+1]=0; else f[i][i+1]=1; } for (int len=2;len<=n;len++){ for (int i=1;i<=n-len+1;i++){ int j=i+len-1; 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; } } } printf("%d\n",f[1] ); return 0; }
相关文章推荐
- 2016暑期集训1C 最长回文
- [2016腾讯暑期实习在线笔试题]最长回文字符串
- AYIT2016省赛集训第六周周一赛 A近似回文词(字符串)
- 腾讯笔试题 构造回文字符串。
- 腾讯17年暑期实习生笔试题 - 构造回文
- 腾讯2017暑期实习生编程题-构造回文
- 可删除某些字符的最长回文字符串(2016腾讯在线笔试题)
- 2016暑期集训---周赛(水题)
- 2016暑期集训集中贴
- 【暑期基础2】D HDU Palindromes _easy version(水:回文字符串)
- 2016暑期集训---搜索(整数拆分)
- 2017百度校园招聘编程题 删除字符构造最长回文字符串(求最长公共子序列的变种)
- 2016暑期集训16B手套
- 腾讯2017暑期实习生编程题:构造回文 [python]
- 【2015-2016 ACM-ICPC, NEERC, Northern Subregional Contest H】【字符串哈希 构造】Hash Code Hacker 构造有相同哈希值的不同字符串
- 2016-2017 HPU暑期集训练习赛
- 2016暑期集训14A找朋友
- 2016暑期集训---搜索(简单BFS)
- 2016暑期集训12C L国货物运输 HDU 5699 货物运输
- 2016暑期集训16C星座