当前位置: 首页 > news >正文

[IOI 2000] 回文字串

题目链接:

dp思路:

①题目要求我们找到最少插入的字符数,让字符串变成回文词。因此,我们定义一个字符串p,它是字符串s的反转。我们找到 s、p的最长公共子序列,再用s长度减去 最长公共子序列就是答案。

②定义一个dp数组, 双重循环枚举 s、p 字符串。 当 s[i] == p[j] 时,dp[i][j] = dp[i-1][j-1] +1;当 s[i] != p[j] 时,由于 s、p 字符串现在枚举的字符是不相等的,因此我们只能选择它们两的其中一个。根据题意,我们要找到最长的公共子序列,dp[i][j] = max(dp[i-1][j], dp[i][j-1])。

③我们可以在读取字符串 s 的时候,从下标1开始读入,这样可以保证 dp[i-1][j-1] 在数组范围中。

代码:

#include<bits/stdc++.h>
using namespace std;
const int N = 1010;

char s[N], p[N];
int dp[N][N];

int main(){
    cin >> (s+1); 
    //从1开始获取s数组的有效长度
    int n = strlen(s+1);
    //将反转的s给p
    int x = 0;
    for(int i = n; i >= 1; i--){
        p[++x] = s[i];
    }
    
    
    for(int i = 1; i <= n; i++){
        for(int j = 1; j <= n; j++){
            if(s[i] == p[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;
}

http://www.dtcms.com/a/106996.html

相关文章:

  • 符号秩检验
  • 跟着尚硅谷学vue-day2
  • 23 种设计模式中的解释器模式
  • C++友元与动态内存
  • 关于存储的笔记
  • go语言:开发一个最简单的用户登录界面
  • 剑指Offer(数据结构与算法面试题精讲)C++版——day3
  • 【数据结构】树、森林与二叉树的转换(含详细图解)
  • TypeScript 泛型与 keyof 约束 | 深入解析
  • 钉钉 + AI 网关给 DeepSeek 办入职
  • Photoshop 2025 Mac中文 Ps图像编辑软件
  • 陈关荣 | 明清江南数学家
  • Cursor助力Java开发(快捷键+配置篇)
  • nginx的反向代理和负载均衡
  • git分布式控制工具详解
  • 深入解析使用Python通过STOMP协议接收ActiveMQ消息
  • 数据库6(数据库指令)
  • Django 使用 matplotlib 遇到 RuntimeError: main thread is not in main loop 解决办法
  • Linux系统程序设计:从入门到高级Day01
  • NHANES指标推荐:HCHR
  • 区间DP总结
  • 4.0/Q2,Charls最新文章解读
  • 2025年渗透测试面试题总结-某腾某讯-技术安全实习生升级(题目+回答)
  • Spring Boot 3.4.3 基于 OpenFeign 实现声明式 HTTP 接口调用
  • LabVIEW高效溢流阀测试系统
  • 严重BUG修复及部分体验问题优化
  • 【5天学会TS】打卡学习Typescript的第一天
  • Markdown常用语法
  • 合合信息大模型加速器2.0:构建智能知识库,助力大模型减少“幻觉”
  • 如何避免内存泄漏,尤其是在React中