题目背景

IOI2000第一题

题目描述

回文词是一种对称的字符串。任意给定一个字符串,通过插入若干字符,都可以变成回文词。此题的任务是,求出将给定字符串变成回文词所需要插入的最少字符数。

比如 “Ab3bd”插入2个字符后可以变成回文词“dAb3bAd”或“Adb3bdA”,但是插入少于2个的字符无法变成回文词。

注:此问题区分大小写

输入输出格式

输入格式:

一个字符串(0<strlen<=1000)

输出格式:

有且只有一个整数,即最少插入字符数

输入输出样例

输入样例#1: 复制

Ab3bd
输出样例#1: 复制

2

这个是一个dp的题目,说实话我自己有点不敢相信,因为完全没有看出来,
但是呢,dp不仅仅只有背包问题,还有很多LCS,LIS,DAG等等,这个如果你熟悉LCS,也不一定可以想到就是这个,我也是看了题解才会的,
这个回文子串,它的特性就是反过来也应该是一样的,那么就找他们最长的公共字串,然后剩下的就补上就可以了。
#include <stdio.h>
#include <string.h>
#include <algorithm>
#include <iostream>
#include <vector>
using namespace std;
const int maxn = ;
char a[maxn],s[maxn];
int dp[maxn][maxn]; int main()
{
cin >> s;
int len = strlen(s),cur=;
for (int i = len - ; i >= ; i--)
{
a[cur++] = s[i];
}
memset(dp, , sizeof(dp));
for (int i = ; i < len; i++)
{
for (int j = ; j < len; j++)
{
if (s[i] == a[j])
{
dp[i + ][j + ] = dp[i][j] + ;
}
else
{
dp[i + ][j + ] = max(dp[i + ][j], dp[i][j + ]);
}
}
}
//printf("%d\n", dp[len][len]);
int ans = len - dp[len][len];
printf("%d\n", ans);
return ;
}

最新文章

  1. Android 笔记 AutoCompleteTextView day8
  2. C#进阶系列——MEF实现设计上的“松耦合”(四):构造函数注入
  3. 《利用python进行数据分析》读书笔记--第七章 数据规整化:清理、转换、合并、重塑(三)
  4. Android 2016新技术
  5. 在oracle里写各种语句得心应手,但是在mybatis.xml文件里呢?
  6. 【Vegas原创】RHEL6多界面切换方法
  7. opencv笔记6:角点检测
  8. IE 火狐浏览器对时间格式的兼容性;使用原型对象的方式 prototype关键字;时间格式化
  9. MySQL 主从架构配置详解
  10. Python 替换字符串
  11. js和jQuery创建元素和把元素插入到文档中所用的方法
  12. mysql存储过程controller的not found造成混乱的解决办法
  13. MySQL数据库的环境及简单操作
  14. 图解MYSQL JOIN ON,SQL JOIN 详解,数据库sql join语句
  15. Cocos2d-x发展---更改父的颜色、透明度的子节点上
  16. 为什么说Java中只有值传递
  17. [原创]基于Zynq Linux环境搭建资源
  18. 使用npm安装appium时的坑
  19. Scrapy快速上手
  20. 【前端vue开发】vue知识点超链接学习笔记

热门文章

  1. Tesseract 引擎翻译
  2. 【Java每日一题】20170221
  3. Java学习笔记之——单例模式
  4. JavaWeb学习日记----表单提交方式
  5. es6 语法 (Proxy和Reflect 的对比)
  6. cf997C. Sky Full of Stars(组合数 容斥)
  7. web框架的本质
  8. Linux 源码阅读 进程管理
  9. EasyUI动画效果
  10. 运行svn tortoiseSvn cleanup 命令失败的解决办法