题目传送门

  1. /*
  2. 题意:问最少插入多少个字符使得字符串变成回文串
  3. 区间DP:dp[i][j]表示[l, r]的字符串要成为回文需要插入几个字符串,那么dp[l][r] = dp[l+1][r-1]; (str[l] == str[r])
  4. dp[l][r] = min (dp[l+1][r], dp[l][r-1]) + 1,然后按照状态转移递归输出路径
  5. */
  6. /************************************************
  7. * Author :Running_Time
  8. * Created Time :2015-8-17 14:42:57
  9. * File Name :UVA_10453.cpp
  10. ************************************************/
  11. #include <cstdio>
  12. #include <algorithm>
  13. #include <iostream>
  14. #include <sstream>
  15. #include <cstring>
  16. #include <cmath>
  17. #include <string>
  18. #include <vector>
  19. #include <queue>
  20. #include <deque>
  21. #include <stack>
  22. #include <list>
  23. #include <map>
  24. #include <set>
  25. #include <bitset>
  26. #include <cstdlib>
  27. #include <ctime>
  28. using namespace std;
  29. #define lson l, mid, rt << 1
  30. #define rson mid + 1, r, rt << 1 | 1
  31. typedef long long ll;
  32. const int MAXN = 1e3 + ;
  33. const int INF = 0x3f3f3f3f;
  34. const int MOD = 1e9 + ;
  35. char str[MAXN];
  36. int dp[MAXN][MAXN];
  37. void print(int l, int r) {
  38. if (l > r) return ;
  39. if (l == r) printf ("%c", str[l]);
  40. else if (str[l] == str[r]) {
  41. printf ("%c", str[l]);
  42. print (l + , r - );
  43. printf ("%c", str[l]);
  44. }
  45. else if (dp[l][r] == dp[l+][r] + ) {
  46. printf ("%c", str[l]);
  47. print (l + , r);
  48. printf ("%c", str[l]);
  49. }
  50. else {
  51. printf ("%c", str[r]);
  52. print (l, r - );
  53. printf ("%c", str[r]);
  54. }
  55. }
  56. void work(void) {
  57. memset (dp, , sizeof (dp));
  58. int len = strlen (str);
  59. for (int i=; i<=len; ++i) {
  60. for (int j=; j+i-<len; ++j) {
  61. int k = j + i - ;
  62. int &res = dp[j][k] = INF;
  63. if (str[j] == str[k]) res = dp[j+][k-];
  64. res = min (res, min (dp[j+][k], dp[j][k-]) + );
  65. }
  66. }
  67. printf ("%d ", dp[][len-]);
  68. print (, len - ); puts ("");
  69. }
  70. int main(void) { //UVA 10453 Make Palindrome
  71. while (scanf ("%s", str) == ) {
  72. work ();
  73. }
  74. return ;
  75. }

区间DP UVA 10453 Make Palindrome的更多相关文章

  1. uva 10453 - Make Palindrome(dp)

    题目链接:10453 - Make Palindrome 题目大意:给出一个字符串,通过插入字符使得原字符串变成一个回文串,要求插入的字符个数最小,并且输出最后生成的回文串. 解题思路:和uva 10 ...

  2. 区间DP UVA 10739 String to Palindrome

    题目传送门 /* 题意:三种操作,插入,删除,替换,问最少操作数使得字符串变成回文串 区间DP:有一道类似的题,有点不同的是可以替换,那么两端点不同的时候可以替换掉一个后成回文, 即dp[j+1][k ...

  3. 区间DP UVA 1351 String Compression

    题目传送门 /* 题意:给一个字符串,连续相同的段落可以合并,gogogo->3(go),问最小表示的长度 区间DP:dp[i][j]表示[i,j]的区间最小表示长度,那么dp[i][j] = ...

  4. 区间DP UVA 11584 Partitioning by Palindromes

    题目传送门 /* 题意:给一个字符串,划分成尽量少的回文串 区间DP:状态转移方程:dp[i] = min (dp[i], dp[j-1] + 1); dp[i] 表示前i个字符划分的最少回文串, 如 ...

  5. uva 10453 - Make Palindrome(dp, 记录路径)

    题目 题意: 给一个字符串 ,判断最少插入多少个字符 使字符串成为回文串, 并输出回文串. 思路:先用dp判断需要个数, 再递归输出路径. #include <iostream> #inc ...

  6. 区间DP与贪心算法的联系(uav Cutting Sticks &amp;&amp; poj Fence Repair(堆的手工实现))

    由于,这两题有着似乎一样的解法所以将其放在一起总结比較,以达到更好的区分二者的差别所在. 一.区间DP uva的Cutting Sticks是一道典型的模板题. 题目描写叙述: 有一根长度为l的木棍, ...

  7. uva 10453 【回文串区间dp】

    Uva 10453 题意:给定字符串,问最少插入多少个字符使其变成回文串,并任意输出一种结果. 题解:和Uva 10739类似,这里是只能增加.类似定义dp[i][j]表示子串Si...Sj变为回文串 ...

  8. UVA 10453 十七 Make Palindrome

    Make Palindrome Time Limit:3000MS     Memory Limit:0KB     64bit IO Format:%lld & %llu Submit St ...

  9. BZOJ 1260&UVa 4394 区间DP

    题意: 给一段字符串成段染色,问染成目标串最少次数. SOL: 区间DP... DP[i][j]表示从i染到j最小代价 转移:dp[i][j]=min(dp[i][j],dp[i+1][k]+dp[k ...

随机推荐

  1. php.ini中extension默许的地址到底在哪里设置的

    原文: http://www.myexception.cn/php/1436096.html ----------------------------------------------------- ...

  2. vue - 官方 - 上手

    Vue和其它框架一样,有用CDN或本地JavaScript框架,国内我推荐 bootstrap cdn. 为什么很多人选择CDN呢? CDN:内容分发网络(不同区域不同服务器,更快),减少本地服务器压 ...

  3. Linux OpenSSH后门的加入与防范

    引言:相对于Windows,Linux操作系统的password较难获取.只是非常多Linuxserver配置了OpenSSH服务.在获取root权限的情况下,能够通过改动或者更新OpenSSH代码等 ...

  4. B+树在NTFS文件系统中的应用

    B+树在NTFS文件系统中的应用 flyfish 2015-7-6 卷(volume) NTFS的结构首先从卷開始. 卷相应于磁盘上的一个逻辑分区,当你将一个磁盘或者磁盘的一部分格式化成NTFS,卷将 ...

  5. PHP swfupload图片上传实例

    swfupload已经是第二次研究,这次自已整了个简单demo,无奈菜鸟最杯… PHP代码如下: if (isset($_FILES["Filedata"]) || !is_upl ...

  6. ZrcListView

    https://github.com/zarics/ZrcListView

  7. 1 TypeScript 简介与安装

    简介: TypeScript 是一种由微软开发维护的自由和开源的编程语言,它是JavaScript的一个超集,支持可选的类型检查,扩展了JavaScript的语法,支持JavaScript的所有语法和 ...

  8. [IT学习]从网上获取pdf制作vce文件

    考过IT证书的朋友,都知道什么是vce文件.如果仅仅找到了pdf版本的文件,该如何转为vce文件呢? 具体的步骤如下: 1.到如下网址下载examformatter,http://www.examco ...

  9. Gson转换Json串为对象报java.lang.NoClassDefFoundError

    解决方法: 1.右键项目 ---> properties ----> java buildpath ---> order and export 2. 勾选 gson-x.x.x.ja ...

  10. Delphi的函数指针

    不求全面,先留个爪: TNotifyEvent = procedure(Sender: TObject) of object; TMethod = record Code, Data: Pointer ...