uva 10453 - Make Palindrome(dp)
题目大意:给出一个字符串,通过插入字符使得原字符串变成一个回文串,要求插入的字符个数最小,并且输出最后生成的回文串。
解题思路:和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)的更多相关文章
- uva 10453 - Make Palindrome(dp, 记录路径)
题目 题意: 给一个字符串 ,判断最少插入多少个字符 使字符串成为回文串, 并输出回文串. 思路:先用dp判断需要个数, 再递归输出路径. #include <iostream> #inc ...
- 区间DP UVA 10453 Make Palindrome
题目传送门 /* 题意:问最少插入多少个字符使得字符串变成回文串 区间DP:dp[i][j]表示[l, r]的字符串要成为回文需要插入几个字符串,那么dp[l][r] = dp[l+1][r-1]; ...
- UVA 10453 十七 Make Palindrome
Make Palindrome Time Limit:3000MS Memory Limit:0KB 64bit IO Format:%lld & %llu Submit St ...
- uva 10453 【回文串区间dp】
Uva 10453 题意:给定字符串,问最少插入多少个字符使其变成回文串,并任意输出一种结果. 题解:和Uva 10739类似,这里是只能增加.类似定义dp[i][j]表示子串Si...Sj变为回文串 ...
- UVA.674 Coin Change (DP 完全背包)
UVA.674 Coin Change (DP) 题意分析 有5种硬币, 面值分别为1.5.10.25.50,现在给出金额,问可以用多少种方式组成该面值. 每种硬币的数量是无限的.典型完全背包. 状态 ...
- uva 10817(数位dp)
uva 10817(数位dp) 某校有m个教师和n个求职者,需讲授s个课程(1<=s<=8, 1<=m<=20, 1<=n<=100).已知每人的工资c(10000 ...
- 10453 Make Palindrome (dp)
Problem A Make Palindrome Input: standard input Output: standard output Time Limit: 8 seconds By def ...
- UVA 10739 String to Palindrome(dp)
Problem H String to Palindrome Input: Standard Input Output: Standard Output Time Limit: 1 Second In ...
- UVA 10617 Again Palindrome 区间DP
题目链接: https://cn.vjudge.net/problem/UVA-10617 题目大意: 问有几种删除字符的方法可以使得该字符串为回文. 解题思路: 删除字符得到回文串的方法数 等于 字 ...
随机推荐
- Unix/Linux环境C编程入门教程(25) C/C++字符测试那些事儿
isalnum isalpha isascii iscntrl isdigit isgraph isislower isprint isspace ispunct isupper isxdigit介绍 ...
- 如何优化pom依赖项?
Maven工程通过pom.xml里的<dependency>来定义依赖项.当然,我们不会少定义依赖项,否则编译不通过.不过,如果我们多定义了依赖项虽然不会造成灾难,但可能会造成一些问题,比 ...
- 搭讪培训班 - 名品试用 - YOKA时尚论坛 - YOKA社区
搭讪培训班 - 名品试用 - YOKA时尚论坛 - YOKA社区 搭讪培训班 发贴回复 发新话题 发布投票 搭讪培训班 1330 1 阅读 回复 跳转到指定楼层 加为好友 时尚懒洋洋 工作:无业游 ...
- Error: Linux下 mysql.sock文件丢失被删除解决方法
在默认情况下,Mysql安装以后会在/tmp目录下生成一个mysql.sock文件,如该文件丢失则Mysql将不能够正常启动,解决方法:使用mysqld_safe 启动即可解决: #basedir:m ...
- #include <hash_set>
哈希查找,不需要排序,适用于精确查找,比二分查找更快 #define _SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS #include <iostream&g ...
- Java面向对象知识点精华
- 【iOS开发-35】有了ARC内存管理机制,是否还须要操心内存溢出等问题?——面试必备
答案:必需要操心啊,ARC也不是万能的. 这里主要是涉及到集合类的数据类型. 比方数组,我们定义了一个可变数组muarr1,然后把一个对象p1加到muarr1中,此时会对这个对象retain一次,相当 ...
- Ror初学笔记
Ror正在以惊人的速度增长着,特别是在常常光顾JavaEye的时候发现Ror已经在国内有非常好的基础了,当然要凑个热闹尝尝鲜 咯. 眼下国内Ror的中文资料还是非常少的,到网上找找就仅仅有Eiffel ...
- 推荐JVM的9款编程语言杀手开发利器
随着各种各样的编程语言铺地盖地向我们涌来,软件世界似乎变得有点疯狂了.JVM的帝国在不断地壮大,它已经不满足于只作为Java语言的运行平台.它勇敢地将自己的触角伸向了JRuby,Groovy等等,未来 ...
- java 类访问权限
Java有四种访问权限, 其中三种有访问权限修饰符,分别为private,public和protected,还有一种不带任何修饰符. private: Java语言中对访问权限限制的最窄的修饰符,一般 ...