题目链接

分析:

感叹算法的力量。

方法一:

设 dp[i][j] 为字符串 s, 从 i 到 j 需要添加的最少字符数。

那么如果 s[i] == s[j], dp[i][j] = dp[i+1][j-1]. 如果 s[i] != s[j], dp[i][j] = min(dp[i+1][j], dp[i][j-1]) + 1.

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <map> using namespace std; const int maxn = ; short dp[maxn][maxn];
char s[maxn]; int d(int i, int j) {
if(i >= j) return ;
else if(dp[i][j] != -) return dp[i][j];
else if(s[i] != s[j]) return (dp[i][j] = min(d(i+, j), d(i, j-)) + );
else return dp[i][j] = d(i+, j-);
} int main(){
// freopen("my.txt", "r", stdin);
int n;
while(scanf("%d", &n) == ) {
memset(dp, -, sizeof(dp)); scanf("%s", s);
d(, n-);
printf("%d\n", dp[][n-]);
} return ;
}

方法二:

LCS + 滚动数组.

设原序列S的逆序列为S',

最少需要补充的字母数 = 原序列S的长度 —  S和S'的最长公共子串长度

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <map> using namespace std; const int maxn = +; int dp[][maxn];
char s1[maxn], s2[maxn]; int main(){
int n; while(scanf("%d", &n) == ) {
scanf("%s", s1); memset(dp[], , sizeof(dp[]));
for(int i=; i<n; i++) {
s2[n-i-] = s1[i];
}
s2[n] = '\0'; for(int i=; i<=n; i++) {
for(int j=; j<=n; j++) {
if(s1[i-] == s2[j-]) dp[i%][j] = dp[(i-)%][j-] + ;
else dp[i%][j] = max(dp[(i-)%][j], dp[i%][j-]);
}
} printf("%d\n", n-dp[n%][n]);
} return ;
}

最新文章

  1. Python 之简易单链表
  2. java.lang.IncompatibleClassChangeError: Implementing class的解决办法,折腾了一天总算解决了
  3. Centos6.7安装docker1.7.1
  4. LeetCode Majority Element I &amp;&amp; II
  5. 【Shell脚本学习17】Shell case esac语句
  6. php错误收集
  7. convert source code files to pdf format in python
  8. Java版本的在指定目录及子目录下创建指定的文件
  9. kubectl自动补全
  10. vscode 前端插件推荐
  11. React browserHistory.push()传参
  12. 全志A33开发板的安卓控制LED-2-JNI基础
  13. Nginx详解二十八:Nginx架构篇Nginx+Lua的安全waf防火墙
  14. [Web 前端] webstorm 快速搭建react项目
  15. BCB 按钮添加背景图
  16. PY3 周总结 第一周
  17. 使用 Shell 脚本自动化 Linux 系统维护任务
  18. CAS 5.1.x 的搭建和使用(二)—— 通过Overlay搭建服务端-其它配置说明
  19. 【java web】Caused by: java.lang.ClassNotFoundException: org.apache.commons.logging.LogFactory
  20. 未来HTML6出现的10个特性

热门文章

  1. 【转】Android Studio中Git的配置及协同开发
  2. 从零開始开发Android版2048 (五) 撤销的实现
  3. HDU-1053-Entropy(Huffman编码)
  4. C++转换函数
  5. BestCoder冠军赛 - 1005 Game 【DP】
  6. JavaScript--DOM增删改操作
  7. mac 查找当前目录下所有同一类型文件,并执行命令行
  8. SVN global ignore pattern for c#
  9. Python Function Note
  10. hdu 1281棋盘游戏(二分匹配)