题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=37

题解:

一开始想从两边向中间添加字符,发现这样不是最优的。因为加入字符之后,这些原本存在的字符是离散的,所以就不能用顺序的方法去添加。

正确做法是将字符串逆过来,与原字符串求最大公共子序列。最大公共子序列即是不需要添加的字符序列,那么剩下的len-dp[len][len]就是需要添加进去的最少字符个数,使得原来的字符串刚好构成回文串。

代码如下:

 #include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <string>
#include <vector>
#include <map>
#include <set>
#include <queue>
#include <sstream>
#include <algorithm>
using namespace std;
#define pb push_back
#define mp make_pair
#define ms(a, b) memset((a), (b), sizeof(a))
#define eps 0.0000001
typedef long long LL;
const int INF = 2e9;
const LL LNF = 9e18;
const int mod = 1e9+;
const int maxn = +; char s[maxn];
int dp[maxn][maxn]; void solve()
{
scanf("%s",s);
int len = strlen(s);
for(int i = ; i<len; i++)
{
for(int j = ; j<len; j++)
{
if(s[i]==s[len--j])
dp[i+][j+] = dp[i][j] + ;
else
dp[i+][j+] = max(dp[i][j+],dp[i+][j]);
}
}
printf("%d\n", len-dp[len][len]);
} int main()
{
int T;
scanf("%d",&T);
while(T--){
ms(dp,);
solve();
}
}

最新文章

  1. Java System.getProperty()方法获取系统信息
  2. oracle数据库建表
  3. mysql-锁表机制分析(转)
  4. Property工具类,Properties文件工具类,PropertiesUtils工具类
  5. [LeetCode#202] Roman to Integer
  6. Xcode6中如何修改文件中自动创建的Created by和Copyright
  7. 9.python异常处理
  8. 代码中输入数字自动筛选出最大值,使用array,for loop and if (21.9.2017)
  9. [USACO17JAN]Promotion Counting晋升者计数
  10. 【codeforces 983E】NN country
  11. Java并发编程-AbstractQueuedSynchronizer源码分析
  12. Idea问题:“marketplace plugins are not loaded”解决方案
  13. C++学习之 —— 输入输出
  14. python中的zip、lambda、map操作
  15. httpClient创建对象、设置超时
  16. 【二分图最大匹配】【匈牙利算法】zoj3988 Prime Set
  17. 29Spring_Autowriter的一些疑惑(很重要)
  18. JavaScript中this关键字的使用比较
  19. Selenium2+python自动化59-数据驱动(ddt)【转载】
  20. Appstore 提交时错误

热门文章

  1. Linux文件权限与属性详解 之 SUID、SGID&amp;SBIT
  2. Redis - 事务操作与详解
  3. Android 中状态栏、标题栏、View的大小及区分
  4. Direct2D教程(二)来看D2D世界中的Hello,World
  5. C#如何生成release版本的程序,生成debug版本的程序
  6. IO模式——同步(堵塞、非堵塞)、异步
  7. Kubernetes调度之亲和与反亲和
  8. javascript点滴积累
  9. 命令行查看memcached的运行状态(转载)
  10. python super()(转载)