uva 10453 Make Palindrome(dp,最小回文生成)

Palindrome Palindrome(最长公共子序列 滚动数组)链接 A palindrome is a symmetrical string, that is, a string read identically from left to right as well as from right to left. You are to write a program which, given a string, ... 阅读详情


dp[l][r]表示s[l]到s[r]这一段字符串生成回文的最小添加字符个数

决策:

1.若s[l]==s[r]

转移到dp[l+1][r-1]

2.若s[l]!=s[r]

在右部添加一个s[l]

转移到:dp[l+1][r]+1


在左部添加一个s[r]

转移到:dp[l][r-1]+1


需要打印最后结果,决策过程中保存路径,做得比较麻烦,对保存路程、输出决策过程不熟悉


#include<cstdio>
#include<cstring>
#include<stack>
#include<queue>
using namespace std;
#define MAXN 1005
char s[MAXN];
int dp[MAXN][MAXN],path[MAXN][MAXN];
int n;
queue<char> q;
stack<char> st;
int min(int a,int b) {return a<b?a:b;}
int dfs(int l,int r)
{
	if(l>r) return 0;
	if(dp[l][r]) return dp[l][r];
	int ans=MAXN;
	if(s[l]==s[r])
	{
		ans=min(ans,dfs(l+1,r-1));
		path[l][r]=1;
	}
	else
	{
		int temp1=dfs(l+1,r)+1,
			temp2=dfs(l,r-1)+1;
		if(ans>temp1)
		{
			ans=temp1;
			path[l][r]=2;
		}
		if(ans>temp2)
		{
			ans=temp2;
			path[l][r]=3;
		}
	}
	dp[l][r]=ans;
	return ans;
}
void out()
{
	int l=0,r=n-1;
	while(l<=r)
	{
		if(path[l][r]==1)
		{
			if(l==r) st.push(s[l]);
			else
			{
				q.push(s[l]);
				st.push(s[r]);
			}
			l++;
			r--;
		}
		else if(path[l][r]==2)
		{
			q.push(s[l]);
			st.push(s[l]);
			l++;
		}
		else if(path[l][r]==3)
		{
			q.push(s[r]);
			st.push(s[r]);
			r--;
		}
	}
	while(!q.empty())
	{
		printf("%c",q.front());
		q.pop();
	}
	while(!st.empty())
	{
		printf("%c",st.top());
		st.pop();
	}
	printf("\n");
}
int main()
{
	while(scanf("%s",s)!=EOF)
	{
		n=strlen(s);
		for(int i=0;i<n;i++)
			for(int j=0;j<n;j++)
				dp[i][j]=path[i][j]=0;
		dfs(0,n-1);
		printf("%d ",dp[0][n-1]);
		out();
	}
	return 0;
}


【转载】参数估计(Parameter Estimation):频率学派(最大似然估计MLE、最大后验估计MAP)与贝叶斯学派(贝叶斯估计BPE) 基础 频率学派与贝叶斯学派 http://www.douban.com/group/topic/16719644/ http://www.zhihu.com/question/20587681 最大似然估计(Maximum likelihood estimation,MLE) http://baike.baidu.com/view/1918804.htm http://baike.baidu.co 阅读详情

相关推荐

告别抓包失败!保姆级配置:让Burp+Proxifier稳定抓取任意微信小程序

本文提供了一套完整的Burp+Proxifier配置方案,确保稳定抓取微信小程序数据。从环境准备、工具选型到Burp Suite深度配置和Proxifier精准设置,详细解决了证书安装、进程捕获和乱码解析等核心问题,帮助开发者告别抓包失败,提升调试效率。

weixin_28738165的博客 452

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

自动驾驶——最优控制算法(LQR)工程化总结

到近段时间,真正在我们的控制器上运行最优控制算法(LQR),一步一个脚印,从开始只是知道其“控制理论”的阶段、再到对着一堆网上的资料和公式一筹莫展不知何着手、再到初步实现了LQR算法的开发(但是使用的扭矩环控制,控制的不好,而且由于各种原因被delay,迟迟无法落地),直到大上个星期,泊车平台有此LQR开发需求,又重新了开始了算法的研发,用时一个周时间完成了算法开发,然后再用一个周时间进行实车最优控制算法验证与调试,取得了很大的进展,由于执行器是转角控制的,这无疑少了很多的工作量。

qq_40464599的博客 2787

ABC 175 F - Making Palindrome

记忆化双向搜索

curry的博客 447

FID指标实战:如何用Python快速计算生成图像的质量分数(附完整代码)

本文详细介绍了如何使用Python计算Fréchet Inception Distance(FID)指标,以评估生成图像的质量。通过完整的代码示例和优化技巧,帮助开发者快速实现FID计算,并解读分数背后的实际意义,适用于GAN和扩散模型的性能评估。

weixin_28718487的博客 375

ctftools-all-in-one使用说明

OAEP (Optimal Asymmetric Encryption Padding) 是一种用于RSA加密的填充方案,目的是提高RSA加密的安全性。在CTF比赛中,如果模数N的两个因子比较接近,使用"费马分解(N)"可能会更快地得到结果;OAEP 是 RSA 的一种标准填充方式(在 PKCS#1 v2.0+ 中定义),因此这类题目本质上仍是 RSA 题,但。,导致你不能直接用常规的 RSA 解密公式 �=�� mod �m=cdmodN 得到有意义的明文。如果你在 CTF 中遇到 RSA 题,

2501_91682449的博客 1713

删除最少字符生成Palindrome

看到一个哥们G家电面试题,求删除最少字符生成Palindrome。大神们都在讨论dp,我完全想不到。 放一个没优化的DFS。 乐神说是O(n3)复杂度, 有机会的话要减少使用substring,并且要想一想能否使用memorization   private static String findPalin(String s) { if (s.length...

weixin_34256074的博客 106

再相逢【知识图谱】中文医学知识图谱CMeKG,中文产科医学知识图谱COKG | 附:图数据库Neo4j下载安装教学(遇到问题并解决) + Neo4j基本操作

本篇文章介绍知识图谱的相关知识。从便于理解的角度切入,给出知识图谱的形象化定义,并介绍了国内的中文医学知识图谱CMeKG,还以用户视角体验了中文产科医学知识图谱。目录二介绍了如何部署安装Neo4j数据库,并解决了部署过程中遇到的一些基础错误,随后介绍了Neo4j图数据库的基础操作。

追光者♂:记录、分享、总结、提升,现象级专栏《Python从入门到人工智能》作者,无惧黑暗,坚信曙光 2615

Educational Codeforces Round 2 600C Make Palindrome(脑洞)

C. Make Palindrome time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output A string is called palindrome if it read

GKHack's Blog 1126

SI案例分享--FPC(柔性电路板)信号仿真

设计高性能的柔性PCB时,由于采用了网格地的参考面构造,因此,需要按照特定的结构进行布局,才可以保证所需目标阻抗的稳定性,该结构的配置过程称为“Hatch Configuration”,合理的参数配置将有助于得到满意的设计效果。

一只豌豆象的博客 2826

实测!Gemini+ChatGPT赋能学术写作:我的论文写作SOP(附提示词)

各位同仁好,我是七哥。一个在高校里从事人工智能相关领域研究,钻研用大模型AI实操的学术人。可以和七哥交流学术写作或Gemini、GPT、Claude等大模型学术实操相关问题,多多交流,相互成就,共同进步。为什么ChatGPT逻辑清晰却写不长?为什么Gemini能深入分析但废话连篇?这其实是两种模型架构的本质差异,GPT系列擅长指令跟随和语言精炼,而Gemini原生支持超长上下文,适合深度文本生成。两者在深度生成与精炼表达上形成了天然互补。我们可以将它们组合起来使用发挥他们各自的特长。

智能AI让学术科研更容易 521

uva 10453 Make Palindrome(区间DP->回文字符串的最小生成)

Make Palindrome Time Limit:3000MS     Memory Limit:0KB     64bit IO Format:%lld & %llu Submit Status Description #include #include #include #include #includ

MR CODER 239

计算机组成原理(第三版)唐朔飞-第三章系统总线-课后习题

计算机组成原理(第三版)唐朔飞-第三章系统总线-课后习题

weixin_45735391的博客 6万+

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

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

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

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

uva 10453 - Make Palindrome(dp)

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

不慌不忙、不急不躁 1487

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

uva 10453 Make Palindrome

uva 10453 Make Palindrome

@fei 475

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

UVA 10453 Make Palindrome(区间简单DP)

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

蚂蚁大战大象 600

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 (区间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

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

区间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

uva10453 - Make Palindrome(递推+ 路径输出)

题目:uva10453 - Make Palindrome(递推+ 路径输出) 题目大意:给出一字符串,仅仅只能做增加字符的操作,问最少增加多少字符串可以是的最后的字符串变成回文。并且将这样的字符串(增加长度要是最小的)的任意一种输出。 解题思路:dp【i】【j】代表第i个字符到第j个字符之间要增加的最少的字符串。递推公式:s【i】 == s【j】, dp【i】【j】 = dp

742

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

题目大意:给一个字符串,要求添加最少个字符,把它变成回文串,并输出。 思路: 区间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; 题目要输出方案,那么只要

小G的ACM之路 952
上一篇: uva 590 Always on the run(dp)
下一篇: uva 10617 Again Palindrome(dp,容斥原理,求字符串内回文子序列的个数)
yjCola
博客等级 码龄14年 4粉丝 138原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值