UVA 10453 Make Palindrome(区间dp-补全回文串+打印结果)

Python补齐字符串长度的实例 如下所示: ljust(len,str)字符向左对齐,用str补齐长度 rjust(len,str)字符向右对齐,用str补齐长度 rjust(len,str)字符中间对齐,用str补齐长度 print 'bbb'.ljust(10,'a') 输出:bbbaaaaaaa print 'bbb'.rjust(10,'a') 输出:aaaaaaabbb print 'bbb'.center(10,'a') 输出:aaabbbaaaa zfill(width)指定字符串长度,右对齐,前面补充0 print '2'.zfill(5) 输出:00002 以上这篇Python补齐字符串长度的实例就是小 立即下载
题目大意:给一个字符串,要求添加最少个字符,把它变成回文串,并输出。

思路:
区间dp,dp[i][j] 表示区间(i, j) 内的字符串添加的最少个数,
变成回文串那么,
如果str[i]==str[j], dp[i][j] = dp[i+1][j-1] + 1
否则dp[i][j] = min{dp[i+1][j], dp[i][j-1]} + 1;
题目要输出方案,那么只要再开一个数组,根据状态转移递归输出即可


#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 1005;
char str[N];
int dp[N][N];
void print_path(int l,int r) {
	if(l > r) {
		return ;
	}
	if(l == r) {
		putchar(str[l]);
	}else if(str[l] == str[r]) {
		putchar(str[l]);
		print_path(l+1,r-1);
		putchar(str[r]);
	}else if(dp[l+1][r] > dp[l][r-1]){
		putchar(str[r]);
		print_path(l,r-1);
		putchar(str[r]);
	}else {
		putchar(str[l]);
		print_path(l+1,r);
		putchar(str[l]);
	}
}
int main() {
	int cas = 0;
	while(scanf("%s",str) != EOF) {
		int len = strlen(str);
		memset(dp,0,sizeof(dp));
		for(int i = 0; i <= len; i++) {
			dp[i][i] = 1;
		}
		for(int l = len-1; l >= 0; l--) {
			for(int r = l; r < len; r++) {
				if(str[l] == str[r]) {
					dp[l][r] = dp[l+1][r-1];
				}else if(dp[l+1][r] > dp[l][r-1]){
					dp[l][r] = dp[l][r-1]+1;
				}else {
					dp[l][r] = dp[l+1][r]+1;
				}
			}
		}
		printf("%d ",dp[0][len-1]);
		print_path(0,len-1);
		printf("\n");
	}
	return 0;
}


STM32F103RC学习(一) 阅读详情

相关推荐

使用PyTorch设计卷积神经网络(CNN)来处理遥感图像Indian Pines数据集

使用PyTorch设计卷积神经网络(CNN)来处理遥感图像Indian Pines数据集

XAX520_1314的博客 2490

AtCoder Beginner Contest 175 F - Making Palindrome | 回文串、最短路、思维建图

题目链接:https://atcoder.jp/contests/abc175/tasks/abc175_f 题目大意: 给出一个字符串s_i与w_i 没使用一次s_i就会花费w_i 问最少花费多少可以使得使用的字符串以某种方式相连可以形成回文 题目思路: 这题确实是一个好题,思路值得学习 考虑题目要求拼成字符串,我们可以这么去考虑 如果把s 与 t拼接,如果有一部分多出来,就看是否有另一部分可以补充 也就是说每一字符串维护两个状态:当前字符串,当前字符串放在左边还是右边 例如:abab

一只酷酷光儿的博客 662

DP3(3D Diffusion Policy)算法详解:从点云感知到扩散动作生成

DP3 的全称是:DP3 = 3D Diffusion Policy\boxed{\text{DP3 = 3D Diffusion Policy}}DP3 = 3D Diffusion Policy​对应论文题目是:3D Diffusion Policy: Generalizable Visuomotor Policy Learning via Simple 3D Representations该工作发表于 Robotics: Science and Systems(RSS)2024。DP3 是一种面向机器

u013250861的博客 349

28 字节算法打印所有回文串

中心拓展法O(n^2) 遍历一遍字符串,以下标为中心,考虑子串长度是奇数或偶数,在这两种情况下拓展子串,判断子串是否是回文串。 假设子串长度是奇数,选择一个字符为中心,向两边扩展进行判断。 假设子串长度是偶数,选择两个字符为中心,向两边扩展进行判断。 一层遍历,一层判断,时间复杂度是O(n^2)。也需要存储子串的内容,空间复杂度O(n)。 import java.util.ArrayList; import java.util.List; /** * 一层遍历,一层判断,时间复杂度是O(n^2)。也需要

weixin_41563161的博客 311

别再被网站识别成机器人了!用Python的undetected_chromedriver+Selenium实现无痕自动化

本文详细介绍了如何利用Python的undetected_chromedriver和Selenium实现无痕自动化,突破现代网站的反爬系统。通过修正浏览器指纹、模拟人类操作行为,并结合实战案例,帮助开发者构建难以被识别的自动化脚本,适用于电商监控等场景。

weixin_30367169的博客 252

ndnSIM学习笔记(一)

在接下来的一段时间要用ndnSIM来做自己的仿真网络,需要系统的学习相关内容,以下为内容记录。1.安装      1.1核心依赖(必需的)             • python &gt;= 2.6             • libsqlite3             • libcrypto++             • pkg-config             • Boost lib...

gaonjzzz的博客 2985

回文串(增减版)

题目描述: 如何判断一个字符串在任意位置(包括最前面和最后面)插入一个字符后能不能构成一个回文串? 输入描述: 仅一行,为一个由字母和数字组成的字符串 s。 输出描述: 如果在插入一个字符之后可以构成回文串,则输出"Yes", 否则输出"No"。 输入:applese 输出:No 解题思路:有三种思路; ① 寻找缺失字符,如果缺失字符小于等于1,那么就可以变成回文串 (偷来的代码如下) ②动态规划...

克克克克业业的学习记录 411

中兴畅行60 ZTE 7552N 深度改造指南:从解锁BL到Magisk Root与IMEI硬改全流程

本文详细介绍了中兴畅行60(ZTE 7552N)的深度改造全流程,包括解锁BL、刷入Magisk获取Root权限以及IMEI硬改等关键步骤。通过专业的操作指南和实用技巧,帮助用户安全完成设备改造,同时提醒注意法律风险和技术难点。

weixin_33670786的博客 1895

ABC 175 F - Making Palindrome

记忆化双向搜索

curry的博客 447

uniapp(vue3)- 详解安装/使用pinia报错reportJSException >>>> exception function:createInstanceContext, excepti

uniapp vue3 pinia报错reportJSException >>>> exception function:createInstanceContext, exception:white screen cause create instanceContext failed,check js stack -> at useStore,H5网页,微信小程序,安卓App,苹果App,nvue,uniapp安装使用pinia出现报错at useStore,uniapp+vue3+ts 使用pinia报

🏆 前端领域优质创作者 4047

Cesium 实战 04 - 标绘功能系列之画点(draw point)

Cesium 实战 - 标绘功能之画点(draw point)。

非科班Java出身GISer的博客 1084

UVA - 10453 Make Palindrome 区间dp

问题 https://vjudge.net/problem/UVA-10453 分析 这道题应该是属于区间dp dp[i][j].len表示[i,j]区间的生成回文字符串的最小代价,dp[i][j].s是生成的回文字符串。 如果s[i]==s[j],dp[i][j].len=dp[i+1][j-1].len+0, dp[i][j].s=s[i]+dp[i+1][j-1].s+s[j] 如果s[i]]!=s[j],dp[i][j].len=dp[i+1][j].len+1, dp[i][j].s=s[i]+

zpf1998的博客 179

【PCIe 总线及设备入门学习专栏 6.1 -- PCIe MCTP】

MCTP 是由 DMTF(Distributed Management Task Force)定义的协议,用于提供设备和主机间基于不同传输层(如 PCIe、I²C、USB 等)的管理消息通信能力。在 PCIe 环境下,MCTP 消息作为的一种特殊形式传输,并被赋予唯一的 VDM Code 值0000b,以区别于其他 VDM。MCTP 在 PCIe 环境中作为一种基于 Type 1 VDM 的管理通信协议,提供了设备与主机之间的灵活数据传输能力。

CodingCos的博客 2127

uva10453 Make Palindrome(DP 求方案)

if(s[x]==s[y]) dp[x][y]=dp[x+1][y-1]+2 else dp[x][y]=min(dp[x+1][y],dp[x][y-1])+2 方案分开来求 #include <iostream> #include <cstdio> #include <cstring> #include <set&gt...

akk99296的博客 141

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

UVA 10453 Make Palindrome(区间简单DP)

题意:给出一串字符串,求出需要至少插入多少个字符使得这个字符串变成会问粗

蚂蚁大战大象 600

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

uva 10453 - Make Palindrome(dp)

题目链接:10453 - Make Palindrome 题目大意:给出一个字符串,通过插入字符使得原字符串变成一个回文串,要求插入的字符个数最小,并且输出最后生成的回文串。 解题思路:和uva 10739的做法相似,只是本题只能插入字符,所以只要在考虑子问题的同时记录住最优的选择就可以了。 #include #include const int N = 10

不慌不忙、不急不躁 1487

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

UVA 10453—— Make Palindrome

题意:给定一个字符串,求添加最少的字母使得该串是回文串。 思路:区间dp+记忆化搜索。dp[i][j]为区间的最小添加数,那么dp[i][j]=min(dp[i+1][j],dp[i][j-1])+1;相等时则为dp[i+1][j-1]; code: #include using namespace std; const int INF=0x3f3f3f3f; const

坚持不懈 548

uva 10453 Make Palindrome

uva 10453 Make Palindrome

@fei 475

uva 10453 - Make Palindrome (区间dp,记忆化搜索)

题目大意 给一个字符串,要求添加最少个字符,把它变成回文串,并输出。 思路 简单的区间dp, f(i, j) 表示区间(i, j) 内的字符串添加的最少个数,变成回文串 那么, 如果str[i]==str[j], f(i, j) = f(i+1, j-1) + 1 f(i, j) = min{f(i+1, j), f(i, j-1)} + 1; 题目要输出方案,那么只要再开一个数组,根据状态转移递归输出即可

D_Double's Journey 2426

uva 10453 Make Palindrome (区间DP + 递归输出)

uva 10453 Make Palindrome 题目大意:给出一段字符串,要求求出最少加入几个字符(任意位置),可以让该字符串变成会问字符串,并输出修改以后的回文字符串。 解题思路:dp[i][j]代表了将该字符串从第i位到第j位变成回文字符串最少要添加的字符。当S[i]==S[j],dp[i][j]=dp[i+1][j−1]S[i] == S[j], dp[i][j] = dp[i + 1][

总有那么一群人喜欢盯着我的博客看,估计这是他们见过最长的博客名,我必须得告诉他们博客名最长可以写多长 722

uva10453 - Make Palindrome(简单动归)

题意: 用最少的变化来构造回文串。 思路: 对于每个位置有两个状态-添加+保留 对于 dp(i,j): 如果str[i]==str[j] 则dp(i,j) = dp(i+1,j-1) 如果str[i]!=str[j] 则从dp(i+1,j)和dp(i,j-1)选出一个变化次数最少的一个状态,然后添加一个与str[i]或str[j]相同的字符,使得 新字符str[j]+dp(i,j-1)

稻草人 957

UVA 10453 Make Palindrome DFS+记忆化搜索 DP

题意:求最少添加多少个字符能让一个字符串变成回文。 直接DFS+记忆化就行了,dp[i][j]表示i到j的最短操作数。 代码: /* * Author: illuz * Blog: http://blog.youkuaiyun.com/hcbbt * File: uva10453.cpp * Create Date: 2013-11-17 14:20:23

水果君の日常 1649

区间DP UVA 10453 Make Palindrome

题目传送门 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...

weixin_30642869的博客 75

UVA 10453 Make Palindrome

区间DP 题意: 问最少增加几个字符,能使给定串回文。并输出串。 解法: 设dp[l][r]为区间[l,r]最少增加几个字符能够回文,所以dp[l][r] = min(dp[l+1][r], dp[l][r-1]) + 1,大串由小串推知,而且在推大串时他的所有小串都已推完,因此这个方程是完备的。打印路径DFS一遍即可。 /* ********************************

= = 907
上一篇: UVA 10154 Weights and Measures(dp)
下一篇: UVA 10029 Edit Step Ladders(最长上升子序列)
HelloWorld10086
博客等级 码龄12年 88粉丝 614原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值