题目链接:10453 - Make Palindrome

题目大意:给出一个字符串,通过插入字符使得原字符串变成一个回文串,要求插入的字符个数最小,并且输出最后生成的回文串。

解题思路:和uva 10739的做法相似,只是本题只能插入字符,所以只要在考虑子问题的同时记录住最优的选择就可以了。

#include <stdio.h>
#include <string.h>
const int N = 1005;int n, dp[N][N], rec[N][N];
char str[N];int solve() {n = strlen(str);memset(dp, 0, sizeof(dp));memset(rec, 0, sizeof(rec));for (int i = n - 1; i >= 0; i--) {for (int j = i + 1; j < n; j++) {if (str[i] == str[j])dp[i][j] = dp[i + 1][j - 1];else {if (dp[i + 1][j] > dp[i][j - 1]) {dp[i][j] = dp[i][j - 1] + 1;rec[i][j] = 1;}else {dp[i][j] = dp[i + 1][j] + 1;rec[i][j] = -1;}}}}return dp[0][n - 1];
}void print(int a, int b) {if (a > b)    return;
//    printf("%d!\n", rec[a][b]);if (a == b)printf("%c", str[a]);else if (rec[a][b] == 0) {printf("%c", str[a]);print(a + 1, b - 1);printf("%c", str[a]);}else if (rec[a][b] == 1) {printf("%c", str[b]);print(a, b - 1);printf("%c", str[b]);}else {printf("%c", str[a]);print(a + 1, b);printf("%c", str[a]);}
}int main() {while (gets(str)) {printf("%d ", solve());print(0, n - 1);printf("\n");}return 0;
}

uva 10453 - Make Palindrome(dp)相关推荐

  1. UVA 10453—— Make Palindrome

    题意:给定一个字符串,求添加最少的字母使得该串是回文串. 思路:区间dp+记忆化搜索.dp[i][j]为区间的最小添加数,那么dp[i][j]=min(dp[i+1][j],dp[i][j-1])+1 ...

  2. UVA 116 Unidirectional TSP DP

    题目链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=3&p ...

  3. UVA 1331 Minimax Triangulation DP, 三角剖分

    题目链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_proble ...

  4. UVA 1625 Color Length DP

    题目链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_proble ...

  5. uva 1366 - Martian Mining(dp)

    题目链接:uva 1366 - Martian Mining 题目大意:给出n和m,然后给出两种矿的分布,a种只能向上运输,b中只能向下运输,问说最多可以得到多少. 解题思路:dp[i][j]表示矩阵 ...

  6. UVa 1366 - Martian Mining (dp)

    本文出自   http://blog.csdn.net/shuangde800 题目链接: 点击打开链接 题目大意 给出n*m网格中每个格子的A矿和B矿数量,A矿必须由右向左运输,B矿必须由下向上运输 ...

  7. UVA 1366 Martian Mining DP

    为了方便,记从右到左运输的为A矿,从下到上运输的为B矿. 首先,假如我们在第i行的前k格架了运输管道运输这K个格子的A矿,那么对于i下面的其他行最少都能架上k格管子,因为不架也是浪费,这一片区域的B矿 ...

  8. UVa 11825 (状压DP) Hackers' Crackdown

    这是我做状压DP的第一道题,状压里面都是用位运算来完成的,只要耐下心来弄明白每次位运算的含义,还是容易理解的. 题意: 有编号为0~n-1的n台服务器,每台都运行着n中服务,每台服务器还和若干台其他服 ...

  9. UVa 11307 - Alternative Arborescence(dp)

    用dp(u,v)表示在u点涂颜色为v的和的最小值,则状态转移方程为 dp(u,v) = v + min{dp(m, vi1), dp(m,vi2),...},u->m存在边, vi表示在m点上可 ...

最新文章

  1. Spring Boot + Vue 如此强大?竟然可以开发基于 C/S 架构的应用
  2. 《Oracle从入门到精通》读书笔记第八章 管理表空间和数据文件之二
  3. linux下批量发请求
  4. 开工大吉!送你一份「远程工作约定」
  5. BZOJ 1088: [SCOI2005]扫雷Mine( )
  6. java camel swagger,java – CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES没有反映在swagger.json中
  7. bzoj4443:[Scoi2015]小凸玩矩阵
  8. linux静态网络ip dns怎么设置,Linux下如何配置静态IP设置DNS和主机名?
  9. Linux下使用fstatfs/statfs查询系统相关信息
  10. 网关在链路上什么意思_银行卡上的数字都什么意思
  11. Spring Cloud与微服务学习总结(8)——Spring Boot、微服务架构和大数据治理三者之间的故事
  12. Delphi之Exception获得错误信息
  13. H264--NAL层的处理--3
  14. jabberd2分析
  15. 侠客行手游java游戏,侠客行-侠客行手游下载 - 超好玩
  16. 飞客分析:防止数据二次破坏的保护方法
  17. 简单使用Java实现微信公众号推送模板消息
  18. C++异常处理底层机制详解
  19. FlashFXP,flashfxp建立ftp站点
  20. win10一共几个版本,有什么区别?win10版本区别

热门文章

  1. 爱上Android之选择您的开发工具
  2. linux 操作系统chgrp 的命令用法
  3. 避免每个类中都初始化日志类
  4. Javascript中计算脚本运行的时间
  5. underscore:get elements counts of a array
  6. 一个初级程序员学习新技术的策略
  7. ViewTreeObserver
  8. 在Android开发中,有哪些好的内存优化方式?如何避免 Out Of Memory(OOM) ?
  9. map使用不存在的下标
  10. Linux开启动过程详解