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

P1435 [IOI2000] 回文字串

时间:2024-10-19 10:22:48浏览次数:1  
标签:字符 倒序 IOI2000 int P1435 文字串 include define

尝试了几次发现添加的字符数等于n-正着的和反着的最长公共子序列的长度,即为答案。正序与倒序“公共”的部分就是我们回文的部分,如果把正序与倒序公共的部分减去你就会惊奇的发现剩余的字符就是你所要添加的字符,也就是所求的正解。

点击查看代码
#include <iostream>
#include <stack>
#include <cmath>
#include <algorithm>
#include <set>
#include <vector>
#include <climits>
#include <string.h>
#include <map>
#include <queue>
#include <list>
#include <cmath>
#include <iomanip> 
#define int long long 
#define ios ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
#define lc u<<1
#define rc u<<1|1
#define gcd __gcd
#define double long double
#define endl "\n"
#define INF LLONG_MAX
#define mod  1000000007
#define N 1005
const double PI = 3.14159265358979323846;
using namespace std;
char s2[1005], s1[1005];
int dp[1005][1005];
signed main()
{
    ios;
    string s; cin >> s;
    int n = s.size();
    for (int i = 0; i < n; i++)
    {
        s1[i + 1] = s[i];
        s2[n - i] = s[i];
    }
    for (int i = 1; i <= n; i++)//s1
    {
        for (int j = 1; j <= n; j++)
        {
            if (s1[i] == s2[j])dp[i][j] = dp[i - 1][j - 1]+1;
            else dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]);
        }
    }
    cout << n - dp[n][n] << endl;
    return 0;
}

标签:字符,倒序,IOI2000,int,P1435,文字串,include,define
From: https://www.cnblogs.com/youyong1/p/18475548

相关文章

  • [IOI2000] 邮局 P10967/P4767/P6246
    P10967设在\(1\simi\)装了\(j\)个邮局的答案\(f_{i,j}\):\(f_{i,j}=\min\{f_{k,j-1}+w_{k+1,i}\}\),其中\(w_{l,r}\)为\(l\simr\)有一个邮局的最小距离。\(w_{l,r}\)怎么求?在中位点装邮局。那么有\(w_{l,r}=w_{l,r-1}+x_j-x_{[(i+j)/2]}\)。其中\(x\)是村庄位置。......
  • P1435 [IOI2000] 回文字串
    原题链接题解1.把字符串倒过来,记作\(S_1\)其最大公共子串是回文串,所以这部分可以不用求,字符串长度减去最大公共子串的长度就是答案2.怎么求最大公共子串的长度呢?假设我们已经知道字符串a和字符串b及其所有子串的lbs,此时往字符串b末尾添加一个字符c变成字符串b1,而字符串a中以......
  • 洛谷题单指南-动态规划2-P1435 [IOI2000] 回文字串
    原题链接:https://www.luogu.com.cn/problem/P1435解题思路:方法1:回文字串的特点是,正着读、反着读是一样的换一个思路,对于一个字符串s,正序、逆序公共的部分就是已经是回文的部分,剩余的部分就是要插入的字符所以,问题转换为,计算一个字符串正序、逆序的最长公共子串,然后剩下的长度......
  • P1435 [IOI2000] 回文字串
    题目:链接: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];elsedp[i][j]=min(dp[i+1][j],dp[i][j-1])+1;就是说如果最外面能......
  • 回文字串
    回文串一般可以考虑把串倒过来思考问题对一个给定的串,我们将其倒序,设其长度为\(l\),求出原串和倒序的串的LCS,设长度为\(x\),则答案为\(l-x\)证明:我们假设已经获得了最终的回文串,然后我们将这个回文串倒序,那么肯定这个回文串与这个原串是相等的以样例为例其中红色字符是添加的......
  • 回文字串
    描述   给定一个字符串,输出所有长度至少为2的回文子串。   回文子串即从左往右输出和从右往左输出结果是一样的字符串,   比如:abba,cccdeedccc都是回文字符串。输入   一个字符串,由字母或数字组成。长度500以内。输出   输出所有的回文子串,每个子串一行。   ......
  • [IOI2000] 邮局
    [IOI2000]邮局题目描述高速公路旁边有一些村庄。高速公路表示为整数轴,每个村庄的位置用单个整数坐标标识。没有两个在同样地方的村庄。两个位置之间的距离是其整数坐标差的绝对值。邮局将建在一些,但不一定是所有的村庄中。为了建立邮局,应选择他们建造的位置,使每个村庄与其最近......
  • 决策单调性优化DP 学习笔记 & P4767 [IOI2000] 邮局 题解
    0.题面题目描述高速公路旁边有一些村庄。高速公路表示为整数轴,每个村庄的位置用单个整数坐标标识。没有两个在同样地方的村庄。两个位置之间的距离是其整数坐标差的绝对值。邮局将建在一些,但不一定是所有的村庄中。为了建立邮局,应选择他们建造的位置,使每个村庄与其最近的邮局......
  • [IOI2000] 邮局
    题目描述高速公路旁边有一些村庄。高速公路表示为整数轴,每个村庄的位置用单个整数坐标标识。没有两个在同样地方的村庄。两个位置之间的距离是其整数坐标差的绝对值。邮局将建在一些,但不一定是所有的村庄中。为了建立邮局,应选择他们建造的位置,使每个村庄与其最近的邮局之间的距......
  • 最长回文字串之暴力解法
    最长回文字串是一个典型的算法问题,首先要搞清楚什么是回文。回文,故名思义就是对称的文字,比如“ABA”,比如“ABABC”中的“AB“。题目如下:给你一个字符串s,找到s中最长......