题目链接: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判断需要个数, 再递归输出路径. #include <iostream> #inc ...

  2. 区间DP UVA 10453 Make Palindrome

    题目传送门 /* 题意:问最少插入多少个字符使得字符串变成回文串 区间DP:dp[i][j]表示[l, r]的字符串要成为回文需要插入几个字符串,那么dp[l][r] = dp[l+1][r-1]; ...

  3. UVA 10453 十七 Make Palindrome

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

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

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

  5. UVA.674 Coin Change (DP 完全背包)

    UVA.674 Coin Change (DP) 题意分析 有5种硬币, 面值分别为1.5.10.25.50,现在给出金额,问可以用多少种方式组成该面值. 每种硬币的数量是无限的.典型完全背包. 状态 ...

  6. uva 10817(数位dp)

    uva 10817(数位dp) 某校有m个教师和n个求职者,需讲授s个课程(1<=s<=8, 1<=m<=20, 1<=n<=100).已知每人的工资c(10000 ...

  7. 10453 Make Palindrome (dp)

    Problem A Make Palindrome Input: standard input Output: standard output Time Limit: 8 seconds By def ...

  8. UVA 10739 String to Palindrome(dp)

    Problem H String to Palindrome Input: Standard Input Output: Standard Output Time Limit: 1 Second In ...

  9. UVA 10617 Again Palindrome 区间DP

    题目链接: https://cn.vjudge.net/problem/UVA-10617 题目大意: 问有几种删除字符的方法可以使得该字符串为回文. 解题思路: 删除字符得到回文串的方法数 等于 字 ...

随机推荐

  1. Vis.js图表插件

    Vis.js是一款基于JavaScript的可视化图表库,Vis.js不像其他的图表库那样仅仅支持几种常用的数据图表,比如线形图.柱状图.饼图等,Vis.js支持上百种不同类型的可视化图表类型,比如时 ...

  2. poj 2425 A Chess Game_sg函数

    题意:给你一个有向无环图,再给你图上的棋子,每人每次只能移动一个棋子,当轮到你不能移动棋子是就输了,棋子可以同时在一个点 比赛时就差这题没ak,做了几天博弈终于搞懂了. #include <io ...

  3. Scrapy URLError

    错误信息如下: 2015-12-03 16:05:08 [scrapy] INFO: Scrapy 1.0.3 started (bot: LabelCrawler) 2015-12-03 16:05 ...

  4. curl断点续载

    摘自http://blog.csdn.net/zmy12007/article/details/37157297 摘自http://www.linuxidc.com/Linux/2014-10/107 ...

  5. Codeforces Round #312 (Div. 2) ABC题解

    [比赛链接]click here~~ A. Lala Land and Apple Trees: [题意]: AMR住在拉拉土地. 拉拉土地是一个很漂亮的国家,位于坐标线.拉拉土地是与著名的苹果树越来 ...

  6. swift锁屏播放,音乐进度更新,专辑,歌手名显示

    我自己用的音乐播放器是自带的AVPlayer 导入头文件#import <MediaPlayer/MediaPlayer.h> 远程控制事件接收与处理- (void)viewWillApp ...

  7. IDE idea 更换项目的JDK步骤

    1.如图:

  8. UVA 714 Copying Books

    题意: 要抄N本书,编号为1,2,3...N, 每本书有1<=x<=10000000页, 把这些书分配给K个抄写员,要求分配给某个抄写员的那些书的编号必须是连续的.每个抄写员的速度是相同的 ...

  9. IBM WebSphere MQ的C#工具类以及源码(net)

    简单的介绍一下MQ常用的对象 Queue Manager 队列管理器 主要负责管理队列.通道等,类似与Oracle中的Oracle实例的概念,在一台服务器中可以定义多个Queue Manager. Q ...

  10. winform使用xml作为数据源

    1.新建窗体应用程序 2.拖放DataGridView 3.在bin\Debug中放入XML文件 using System; using System.Collections.Generic; usi ...