动态规划——Poj 1159 Palindrome

深度学习——VGG16模型详解 1、网络结构 VGG16模型很好的适用于分类和定位任务,其名称来自牛津大学几何组(Visual Geometry Group)的缩写。 根据卷积核的大小核卷积层数,VGG共有6种配置,分别为A、A-LRN、B、C、D、E,其中D和E两种是最为常用的VGG16和VGG19。 介绍结构图: conv3-64 :是指第三层卷积后维度变成64,同样地,conv3-128指的是第三层卷积后维度变成128; input(224x224 RGB image) :指的是输入图片大小为224244的彩色图像,通道为 阅读详情

1)   题目

Palindrome

Time Limit: 3000MS

 

Memory Limit: 65536K

Total Submissions: 46005

 

Accepted: 15688

Description

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, determines the minimal number of characters to be inserted into the string in order to obtain a palindrome. 

As an example, by inserting 2 characters, the string "Ab3bd" can be transformed into a palindrome ("dAb3bAd" or "Adb3bdA"). However, inserting fewer than 2 characters does not produce a palindrome. 

Input

Your program is to read from standard input. The first line contains one integer: the length of the input string N, 3 <= N <= 5000. The second line contains one string with length N. The string is formed from uppercase letters from 'A' to 'Z', lowercase letters from 'a' to 'z' and digits from '0' to '9'. Uppercase and lowercase letters are to be considered distinct.

Output

Your program is to write to standard output. The first line contains one integer, which is the desired minimal number.

Sample Input

5

Ab3bd

Sample Output

2


2)    题意

题目给出回文的定义:一串字符,从左往右读和从右往左读是完全一样的。比如aba,从左往右读和从右往左读都是aba。

给出一串字符,求使该字符串是回文需要添加的最少字符个数。


3)    数据范围

字符串的长度n,3<=n<=5000。


4)    算法

动态规划法。设字符串为S,长度为L,d[i][j]表示以第i个字符为首,第j个字符为尾的字符串构成回文最少需要添加的字符个数,i和j的初值分别为1、L。

如果S[i] == S[j],即字符串两端的字符相等,d[i][j] = d[i+1][j-1],

即d[i][j]等于去掉头尾后的字符串的d值。

如果S[i] != S[j],此时划分出两个子问题,求d[i][j-1]和d[i+1][j],它两中较小的值再加1即为d[i][j](加上的1个字符是用于和S[i]或者S[j]构成对称的)。

状态转移方程:


从上面的分析可以看出,这个问题的实质是求最长公共子序列,只是这两个序列分别是串S的前一部分和串S后一部分的逆序列。


5)    代码

#include <iostream>
#include <cstdio>
#include <cstring>

using namespace std;

#define MIN(a, b) ((a) < (b) ? (a) : (b))

#define MAXSIZE 5005

//开始没有考虑内存问题,使用了int型,超内存限制,也可使用滚动数组解决
unsigned short d[MAXSIZE][MAXSIZE];

int ToPalindrome(char *s, int n)
{
	int i, j, k;
	//只有一个字符时,不需要添加字符
	for (i = 0; i < n; i++)
	{
		d[i][i] = 0;
	}
	//串长度为2时
	for (i = 1; i < n; i++)
	{
		if (s[i-1] == s[i])
		{
			d[i-1][i] = 0;
		}
		else
		{
			d[i-1][i] = 1;
		}
	}

	//串长度递增
	for (k = 2; k < n; k++)
	{
		for (i = 0, j = k; j < n; i++, j++)
		{
			if (s[i] == s[j])
			{
				d[i][j] = d[i+1][j-1];
			}
			else
			{
				d[i][j] = MIN(d[i][j-1], d[i+1][j]) + 1;
			}
		}
	}
	return d[0][n-1];
}

int main(void)
{
	char str[MAXSIZE];

	int n;
	while (scanf("%d", &n) != EOF)
	{
		getchar();
		gets(str);
		printf("%d\n", ToPalindrome(str, n));
	}
	return 0;
}

6)    测试数据

5

Ab3bd

3

aaa

7

Aabcdba

7)    提交结果


【EB_Tresos专题】-01-EB Tresos导入工程 <--返回「Autosar_BSW高阶配置」总目录--> <--返回「Autosar_BSW高阶配置」专栏主页--> <--返回「个人博客」首页--> <--返回「Autosar_BSW高阶配置」总目录--> <--返回「Autosar_BSW高阶配置」专栏主页--> <--返回「个人博客」首页--> 结尾 ... 阅读详情

相关推荐

nvlddmkm事件ID14报错排查全指南:从找不到描述到显卡驱动崩溃

系统日志中的“无法找到描述”往往让人一头雾水,但这类提示其实隐藏着驱动故障的关键线索。Windows事件查看器通过事件源和ID记录系统异常,其中显卡驱动相关的内核模式驱动组件一旦超时失败,就会触发TDR机制,产生13、14、153等不同事件ID。理解这些ID的含义,比纠结“找不到描述”本身更重要。对于频繁出现的驱动崩溃问题,可以从日志频率和发生场景判断方向,再通过安全模式下彻底清理驱动、关闭冲突软件、检查供电和温度等步骤逐层定位。无论是游戏满载黑屏,还是睡眠唤醒后闪退,掌握NVIDIA驱动日志的解读逻辑,都

weixin_30545945的博客 409

POJ 1159 Palindrome

问要将给定字符串变为回文字符串,最少插入多少个字符。 难点在于想清楚“如何转变为回文字符串”,若为回文字符串,则正序逆序完全相同,也就是lcs长度等于字符串长度。 所以如果要求插入字符的数量,就是正序逆序串lcs的长度减去字符串的长度。 还有一个问题是,如果直接这么写空间是不够的。要用到滚动数组。 因为dp是上下状态之间的转移,所以只需要有两个位置,一个保存上一状态,一个用于通过上一状态计算出当前...

CarpeDiem 264

Android GNSS 可视卫星星空图/卫星天顶图 原理及画法介绍

目录1 概念介绍2 绘制步骤2.1 获取卫星信息2.2 绘制底图 效果图: 1 概念介绍 首先介绍一下方位角和高度角的概念: 方位角:是从某点的指北(地理北极)方向线起,依顺时针方向到目标方向线之间的水平夹角。 高度角:从一点至观测目标的方向线与水平面间的夹角。 卫星天顶图 即是根据每一颗卫星的方位角和高度角将其画在以观测位置为中心的天顶图上。 天顶图其底图为由外向内的三个圆和四条直线。三个圆由外向内依次代表高度角0°、30°、60°,中心点代表90°;四条直线分别表示正北-正南、东北-西南、正东

x1471898145的博客 1万+

(POJ) 1159 Palindrome

传送门 题目大意:给你一串字符串,问最少添加几个字符可以使该字符串变成回文串。 解题思路:先求出该字符串的最长回文子串。然后总长度减去最长回文子串的长度就行了。已经形成回文的我们没有必要多此一举去添加字符了,而还单着的,我们在相对的位置在给他加一个就行了。 但是直接区间dp求最长回文字串,开二维数组会MLE,而又不太好滚动(不知道可不可以滚动),不过可以直接开short 莽过。 #inc...

一只不争气的蒸汽机的博客 287

Photoshop实战技巧(9)——高效去除复杂水印的五种进阶方法

本文详细介绍了Photoshop中高效去除复杂水印的五种进阶方法,包括色阶通道爆破法、频率分离高阶应用、智能填充+手动修复组合拳等专业技巧。针对半透明水印、密集文字水印等复杂场景,提供分步操作指南和实战案例,帮助用户精准去除水印同时保留原始图像细节,大幅提升工作效率。

cake8的博客 959

论文复现5:UMI Universal Manipulation Interface

UMI 采用手持式夹具,加上精心的界面设计,可实现便携式、低成本和信息丰富的数据收集,以进行具有挑战性的双手和动态操作演示。配备这些功能后,UMI 框架解锁了新的机器人操作功能,只需更改每个任务的训练数据,即可实现零样本可推广的动态、双手、精确和长视野行为。我们通过全面的现实世界实验展示了 UMI 的多功能性和有效性,其中通过 UMI Zeroshot 学习的策略在对不同的人类演示进行训练时可以推广到新的环境和对象。项目主页:https://umi-gripper.github.io/

github_38060285的博客 1972

POJ 1159 Palindrome(lcs加滚动数组)

lcs算法 加 滚动数组 注释详

笨鸟 1004

你以为你懂 Java 反射?看了这篇源码分析,我发现我以前都错了

摘要:本文讲述了一次生产环境Metaspace内存溢出的故障排查经历。事故源于一个通用数据导出功能中频繁使用反射调用method.invoke(),触发了JVM的"膨胀机制":当同一Method对象调用超过15次时,JVM会动态生成GeneratedMethodAccessor类,导致Metaspace被撑爆。文章分析了问题根源在于循环中反复调用getMethods()创建新Method对象,并提出了三种解决方案:缓存Method对象、改用MapStruct/MethodHandle工具

BUG猿的博客 770

poj1159--Palindrome(dp:最长公共子序列变形 + 滚动数组)

Palindrome Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 53414   Accepted: 18449 Description A palindrome is a symmetrical string, that is, a string read ide

随风的专栏 1137

YOLOv8 改进有效涨点专栏目录 | 含卷积、主干、注意力机制、Neck、检测头、损失函数、二次创新C2PSA/C3k2等各种网络结构改进

YOLOv8在目标检测领域的地位与优势模型改进的意义与价值本专栏的特色与创新点读者学习路径建议关键改进点回顾不同场景的模型选型建议开源社区资源汇总持续学习路径指南YOLOv8在目标检测领域的地位与优势模型改进的意义与价值本专栏的特色与创新点读者学习路径建议关键改进点回顾不同场景的模型选型建议开源社区资源汇总持续学习路径指南。

weixin_39818775的博客 1072

Agent 智能体学习指南:从入门到求职的完整路线

AI Agent 不是更长的 prompt,而是一类系统设计——模型在受控环境里观察状态、选择动作、调用工具、接收反馈。本文系统梳理 Agent 的 5 个核心概念、7 个关键模块(Goal/State/Context/Tools/Loop/Guardrails/Eval)、三条学习路线(工程落地/研究算法/求职作品)、框架选型策略(LangGraph/OpenAI Agents SDK/Pydantic AI 等场景推荐),以及可执行的 7 天最小项目计划(从概念到简历 bullet)。

program哲学 229

poj 1159 Palindrome(最长公共子串)

大概题意就是求最少添加多少个字符可以把长度为N的字符串编程回文串。 则需要最少需要补充的字母数 = 原序列S的长度 — S和S'的最长公共子串长度 S'为原串的逆串。 关于求最长公共子串, 用到的是动态规划 伪代码如下 if( i ==0 || j == 0 ){ MaxLen(i, j) = 0 //两个空串的最长公共子序列长度当然...

233

如何理解S参数的三大特性

提到S参数的时候经常会涉及一些概念,如无源性、因果性、互易性等,本文逐一介绍这些特性的概念、成因以及判断方式。

一只豌豆象的博客 4495

【动态规划】【poj 1159】palindrome

【动态规划】【poj 1159】palindrome 问题 给定一个长度为n( 分析 设原序列S的逆序列为S',则这道题目的关键在于, 最少需要补充的字母数= 原序列S的长度— S和S'的最长公共子串长度 设 S 为原字符串,RS=reverse(S)即S反转后的字符串,LCS(S,RS)为S与RS的最长公共子序列,len(S)为S的长度。令S={a1~an},则RS={a

pi9nc的专栏 944

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

POJ 1159 Palindrome [动态规划+滚动数组]

POJ 1195 Palindrome [动态规划+滚动数组] 写在最前面:吹爆滚动数组!!!!!!!太好用了叭!!!快学它!!! 题目:http://poj.org/problem?id=1159 题目大意:求最少增加几个字符可以使字符串s变成回文串 样例: 输入:5 Ab3bd 输出:2 思路:动态规划 设置状态:f[i][j]的值表示从s[i]到s[j]至少增加几个字符可以使s[i…j]变成...

MMMMMelody的博客 333

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

【POJ1159】Palindrome(动态规划)

题面:【POJ1159】Palindrome 这道题是一道较水的DP题。 我们可以用f[i][j]来表示把[i..j]这个区间变成一个回文串所需添加的最少字母数,这样我们就可以轻松地得到状态转移方程: 当s[i]==s[j]时,f[i][j]=min{f[i+1][j-1],f[i+1][j]+1,f[i][j-1]+1};当s[i]!=s[j]时,f[i][j]=min{f[i+1][j]...

CXR的博客 892

POJ1159 Palindrome 【动态规划】

Palindrome Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 52571   Accepted: 18124 Description A palindrome is a symmetrical string, that is, a string read

长风的专栏 1232

Palindrome(poj1159)(动态规划)

Palindrome Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 53877   Accepted: 18610 Description A palindrome is a symmetrical string, that is, a string read i

My Castle 896

poj1159 Palindrome

poj1159 Palindrome Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 68871 Accepted: 23964 Description A palindrome is a symmetrical string, that is, a string read identically from left to ...

miracle from life 436

poj 1159 Palindrome 动态规划

lstar@ubuntu:~/ds/poj$ ./a.out 2 lstar@ubuntu:~/ds/poj$ cat 1159_2.in.dat  4 Ab3A Ab33A这种对奇数的情况也需要特殊考虑,如果以中间的3为分界,则返回2,其实最小应该是1 3L7YWY  最短匹配 3L7YWY7L3 只需要3个,且并不是以原中心点为7 Y W进行扩展的,所以自己推断的状

小留家心的爱心之窝 ^_^ 925

POJ 1159 Palindrome (动态规划)

Palindrome Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 48269   Accepted: 16570 Description A palindrome is a symmetrical string, that is, a string read ide

Hadis_yuki 1516

Palindrome POJ 1159 动态规划

Description 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, determines t

JWMNEU的专栏 776

POJ 1159 Palindrome(动态规划:最长回文子序列)

//POJ 1159 Palindrome(动态规划:最长回文子序列) #include #include #include #include #include using namespace std; int dp[2][5050]; int Max(int a,int b) { if(a>b) { return a; } return b; }

u014068781的专栏 538

POJ1159 Palindrome(动态规划问题)

题目:DescriptionA palindrome is a symmetrical string, thatis, 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, determines the ...

qq_40259739的博客 498
上一篇: 动态规划——最长上升子序列
下一篇: 递归——Ny 305 表达式求值
庞老板
博客等级 码龄15年 127粉丝 66原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

庞老板

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值