2016暑期集训1B 构造回文字符串
来源:互联网 发布:php获取表单数据 编辑:程序博客网 时间:2024/05/21 11:32
构造回文字符串
时间限制: 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][n]); return 0;}
0 0
- 2016暑期集训1B 构造回文字符串
- 2016暑期集训1C 最长回文
- 2016暑期集训16B手套
- NBUT-2014暑期集训专题练习1 -> 二分法B - B
- 2016暑期集训14B 奶牛逃跑 cowrun
- 2016暑期集训13 B瞬间移动 HDU 5698
- 2016暑期集训1A 组合数
- 暑期集训 Contest 1
- 构造回文字符串(最长公共子序列)----腾讯2017暑期实习生编程题
- [2016腾讯暑期实习在线笔试题]最长回文字符串
- [2016腾讯暑期实习在线笔试题]最长回文字符串
- 2016暑期集训---周赛(水题)
- 暑期集训-dp(1)
- hdu2191 多重背包(2016xynu暑期集训检测 -----B题)
- 暑期集训Day2训练赛D题Spreadsheets(codeforces 1B)
- 暑期集训
- 构造回文字符串
- 牛客网-构造回文字符串
- 暑假集训8.10 sdutoj2482 二叉排序树 (是否为同一颗排序树)
- Struts2上传文件
- POJ-1159 回文串 【LSC DP or +滚动数组省空间】
- Android studio运行时卡顿
- java基本语法学习漏点总结
- 2016暑期集训1B 构造回文字符串
- 求两个大数的和
- LintCode:线段树的查询II
- C#控制台基础 可空类型与非可空类型 相互转换
- Constructing Roads In JGShining's Kingdom
- HDU 5730——Shell Necklace
- 百度地图
- Spring 整合 Quartz 实现定时任务
- Ubuntu VPS开启root账户SSH登录