首页 > 其他分享 >P1435 [IOI2000] 回文字串

P1435 [IOI2000] 回文字串

时间:2024-04-05 21:25:39浏览次数:45  
标签:IOI2000 res dfs int P1435 文字串 include 步数 dp

题目:
链接:https://www.luogu.com.cn/problem/P1435
观察到:在里面插入字符不会影响外面的配对
所以以dp[i][j]记录字符串s下标从i到j变化到回文串步数,那么递推公式:
if(s[i] == s[j])dp[i][j] = dp[i+1][j-1];
else dp[i][j] = min(dp[i+1][j],dp[i][j-1]) + 1;
就是说如果最外面能配对,那么步数就是里面字串的步数
如果不能配对,那么步数就是去掉左/右的步数min + 1
同时设置退出条件即可
代码

#include<iostream>
#include<vector>
#include<algorithm>
#include<math.h>
#include<sstream>
#include<string>
#include<string.h>
#include<iomanip>
#include<stdlib.h>
#include<map>
#include<queue>
#include<limits.h>
#include<climits>
#include<fstream>
#include<stack>
typedef unsigned long long ll;
using namespace std;
const int N = 1e3 + 2;
string s;
int dp[N][N];
int dfs(int i, int j)
{
	if (dp[i][j] != 0)return dp[i][j];//记忆化
	if (i >= j)return 0;//退出条件
	int res;
	if (s[i] == s[j])res = dfs(i + 1, j - 1);
	else res = min(dfs(i + 1, j), dfs(i, j - 1)) + 1;
	return dp[i][j] = res;
}
int main()
{
	getline(cin, s);
	int ans = INT_MAX;
	cout << dfs(0, s.length() - 1);
	return 0;
}

标签:IOI2000,res,dfs,int,P1435,文字串,include,步数,dp
From: https://www.cnblogs.com/zzzsacmblog/p/18116209

相关文章

  • 回文字串
    回文串一般可以考虑把串倒过来思考问题对一个给定的串,我们将其倒序,设其长度为\(l\),求出原串和倒序的串的LCS,设长度为\(x\),则答案为\(l-x\)证明:我们假设已经获得了最终的回文串,然后我们将这个回文串倒序,那么肯定这个回文串与这个原串是相等的以样例为例其中红色字符是添加的......
  • 回文字串
    描述   给定一个字符串,输出所有长度至少为2的回文子串。   回文子串即从左往右输出和从右往左输出结果是一样的字符串,   比如:abba,cccdeedccc都是回文字符串。输入   一个字符串,由字母或数字组成。长度500以内。输出   输出所有的回文子串,每个子串一行。   ......
  • [IOI2000] 邮局
    [IOI2000]邮局题目描述高速公路旁边有一些村庄。高速公路表示为整数轴,每个村庄的位置用单个整数坐标标识。没有两个在同样地方的村庄。两个位置之间的距离是其整数坐标差的绝对值。邮局将建在一些,但不一定是所有的村庄中。为了建立邮局,应选择他们建造的位置,使每个村庄与其最近......
  • 决策单调性优化DP 学习笔记 & P4767 [IOI2000] 邮局 题解
    0.题面题目描述高速公路旁边有一些村庄。高速公路表示为整数轴,每个村庄的位置用单个整数坐标标识。没有两个在同样地方的村庄。两个位置之间的距离是其整数坐标差的绝对值。邮局将建在一些,但不一定是所有的村庄中。为了建立邮局,应选择他们建造的位置,使每个村庄与其最近的邮局......
  • [IOI2000] 邮局
    题目描述高速公路旁边有一些村庄。高速公路表示为整数轴,每个村庄的位置用单个整数坐标标识。没有两个在同样地方的村庄。两个位置之间的距离是其整数坐标差的绝对值。邮局将建在一些,但不一定是所有的村庄中。为了建立邮局,应选择他们建造的位置,使每个村庄与其最近的邮局之间的距......
  • 最长回文字串之暴力解法
    最长回文字串是一个典型的算法问题,首先要搞清楚什么是回文。回文,故名思义就是对称的文字,比如“ABA”,比如“ABABC”中的“AB“。题目如下:给你一个字符串s,找到s中最长......
  • [IOI2000]邮局 题解
    简要题意线段上有\(V\)个村庄,现在要建\(P\)个邮局,使每个村庄到最近的邮局的距离之和最小。50分做法设\(dp[i][j]\)表示第一个村庄到第\(i\)个村庄,建了\(j\)个......
  • Codeforces Round #837 (Div. 2)D (最大回文字串+树)
    题目链接:D.Hossamand(sub-)palindromictree题目描述给定一颗有n(n<=2e3)个顶点的树,每个顶点有一个点权(字符),定义s(u,v)为从u到v的简单路径所经过的点权形成的字符......
  • 力扣HOT100算法题5:最长回文字串
    文章目录​​一、题目​​​​二、方法一:解题思路​​​​三、方法一:代码解析​​​​四、方法二:动态规划​​​​五、方法二:代码解析​​一、题目给你一个字符串s,找到s......