详解[USACO07OPEN] Cheapest Palindrome G(洛谷PP2890)(区间DP经典题)

题目

思路

考虑区间DP。

dp[i][j]为从i到j这段区间被修正为回文串的最小花费

   c[cc][1]为添加字符cc的花费

   c[cc][2]为删去字符cc的花费

   s为题目给出的字符串。

  • 用[i + 1,j]区间转移:这种转移相当于在[i+1,j]区间的左边加入一个字符,让[i,j]变为回文的方法为在左边删去该字符或在右边加上该字符,有转移方程:
    dp[i][j] = min(dp[i][j],dp[i + 1][j] + min(c[int(s[i])][1],c[int(s[i])][2]));
  • 用[i,j − 1][i,j − 1]区间转移:这种转移相当于在[i,j−1][区间的右边加入一个字符,方法同上:
dp[i][j] = min(dp[i][j],dp[i][j - 1] + min(c[int(s[j])][1],c[int(s[j])][2]));
  • 当前区间[i,j]满足s[i] == s[j],直接用[i + 1,j − 1]转移:
if(j - i == 1) dp[i][j] = 0;
else dp[i][j] = min(dp[i][j],dp[i + 1][j - 1]);

代码

#include<bits/stdc++.h>
using namespace std;
int n,m,dp[2101][2101],c[255][3],x,y;
//从i到j这段区间被修正为回文串的最小花费
char s[2101],cc;
int main()
{
  cin>>n>>m;
  cin>>s + 1;
  for(int i = 1;i <= n;i++)
  {
    cin>>cc>>x>>y;
    c[int(cc)][1] = x;
    c[int(cc)][2] = y;
  }
  memset(dp,0x3f,sizeof(dp));
  for(int i = 1;i <= m;i++) dp[i][i] = 0;
  for(int l = 1;l <= m;l++)
    for(int i = 1;l + i - 1 <= m;i++)
    {
      int j = i + l - 1;
      dp[i][j] = min(dp[i][j],dp[i + 1][j] + min(c[int(s[i])][1],c[int(s[i])][2]));
      dp[i][j] = min(dp[i][j],dp[i][j - 1] + min(c[int(s[j])][1],c[int(s[j])][2]));
      if(s[i] == s[j])
      {
		if(j - i == 1) dp[i][j] = 0;
		else dp[i][j] = min(dp[i][j],dp[i + 1][j - 1]);
	  }
    }
  cout<<dp[1][m];
  return 0;
}

怎么样?听懂了吗?如果听懂了就请点赞收藏加关注支持一下吧!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/789251.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux镜像源设置不再难:一键脚本,新手也能成为优化高手(一键切换镜像源/Docker一键安装脚本)

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 更换镜像源 📒📝 一键切换软件源📝 Docker一键安装脚本⚓️ 相关链接 ⚓️📖 介绍 📖 在国内,Linux系统用户经常会遇到下载软件包时速度慢的问题,这通常是因为默认的镜像源并不总是最优选择。对于新手来说,手动设置…

暑假学习计划怎么做 用待办计划软件安排更科学

暑期来临&#xff0c;无论是学生还是老师&#xff0c;做好暑期计划都至关重要。记得去年暑假&#xff0c;我给自己定下了阅读十本书的目标&#xff0c;却因为缺乏明确的计划&#xff0c;最后只草草读完了两本。而今年&#xff0c;我决定尝试一种新的方式——使用待办计划软件来…

每周算法:无向图的双连通分量

题目链接 冗余路径, Redundant Paths G 题目描述 为了从 F F F 个草场中的一个走到另一个&#xff0c;奶牛们有时不得不路过一些她们讨厌的可怕的树。 奶牛们已经厌倦了被迫走某一条路&#xff0c;所以她们想建一些新路&#xff0c;使每一对草场之间都会至少有两条相互分离…

VS安装Qt扩展工具

1-Visual Studio中安装QT插件 **插件下载地址&#xff1a;**http://download.qt.io/development_releases/vsaddin/ 关闭VS,双击下载的QT插件&#xff0c;默认安装即可&#xff1b; &#xff08;1&#xff09;配置Qt的MSVC编译器安装路径 打开Visual Studio&#xff0c;在菜单栏…

ceph存储

1 存储简介 存储的三种方式包括&#xff1a;块存储、文件存储、对象存储1。此外&#xff0c;还有内存存储、硬盘存储和闪存存储2。 内存存储&#xff1a;临时性数据存储方式&#xff0c;存储速度快&#xff0c;容量有限&#xff0c;通常用来存储正在使用的程序和数据。硬盘存…

AI绘画小白必备!Stable Diffusion常用插件合集,好用推荐!(附插件下载)

前言 宝子们&#xff0c;早上好啊~Stable Diffusion 常用插件&#xff0c;月月已经给大家整理好了&#xff0c;自取就好。 拥有这些SD常用插件&#xff0c;让您的图像生成和编辑过程更加强大、直观、多样化。以下插件集成了一系列增强功能&#xff0c;覆盖从自动补全提示词到…

windows10 +VS2019环境下的PCL安装和配置

今天想做点云重建&#xff0c;千篇一律&#xff0c;PCL少不了。一路跑下来觉得PCL的安装和环境配置还挺麻烦的&#xff0c;比OpenCV真的麻烦很多&#xff0c;有点不想写详细安装和配置过程了&#xff0c;偷个懒&#xff0c;就转载一下大佬的文章吧&#xff0c;下面的博主们已经…

计算机SCI期刊,中科院2区,影响力大,认可度高

一、期刊名称 Complex & Intelligent Systems 二、期刊简介 期刊类型&#xff1a;SCI 学科领域&#xff1a;计算机科学 影响因子&#xff1a;5.0 中科院分区&#xff1a;2区 三、期刊征稿范围 Complex & Intelligent Systems旨在提供一个论坛&#xff0c;用于展示…

Redis实战—秒杀优化(Redis消息队列)

回顾 我们回顾一下前文下单的流程&#xff0c;当用户发起请求&#xff0c;此时会请求nginx&#xff0c;nginx会访问到tomcat&#xff0c;而tomcat中的程序&#xff0c;会进行串行操作&#xff0c;分成如下几个步骤。 1、查询优惠卷 2、判断秒杀库存是否足够 …

东旭蓝天被控股股东占用78亿:近七年业绩奇差,或面临退市

《港湾商业观察》施子夫 张楠 在7月5日一口气发了超过30份公告后&#xff0c;终于让投资者对于东旭蓝天2023年和今年一季度经营业绩有了更清晰的观察。 与此同时&#xff0c;东旭蓝天&#xff08;下称&#xff09;也收到了深交所的关注函。种种不利因素之下&#xff0c;上市…

华为机试HJ105记负均正II

华为机试HJ105记负均正II 题目&#xff1a; 想法&#xff1a; 分别记录输入中的正数和负数&#xff0c;根据规则计算平均值即可 count 0 sum 0 sum_count 0 while True:try:number float(input())if number < 0:count 1elif number > 0:sum numbersum_count 1e…

windows下使用编译opencv在qt中使用

记录一下&#xff1a;在windows下qt使用opencv 1、涉及需要下载的软件 CMake 下载地址opecnv下载地址mingw(需要配置环境变量) 这个在下载qt的时候可以直接安装一般在qt的安装路径下的tool里比如我的安装路径 (C:\zz\ProgramFiles\QT5.12\Tools\mingw730_64) 2、在安装好CMake…

二十年大数据到 AI,图灵奖得主眼中的数据库因果循环

最近&#xff0c;MIT 教授 Michael Stonebraker 和 CMU 教授 Andrew Pavlo (Andy) 教授联合发表了一篇数据库论文。Michael Stonebraker 80 高龄&#xff0c;是数据库行业唯一在世的图灵奖得主&#xff0c;Andy 则是业界少壮派里的最大 KOL。 一老一少&#xff0c;当今数据库届…

[js] 对象数组按照某个属性进行分组,

要将给定的对象数组按照 field 属性进行分组 const data [{"name":"a","field":"f"},{"name":"b","field":"ff"},{"name":"v","field":"f"},{&qu…

7.深度学习概述

深度学习概述 1. 线性回归1.1 线性回归一般表达式1.2 线性回归内积表达方式&#xff1a;1.3 多个样本时&#xff0c;线性回归的进一步表达&#xff1a;1.4 线性回归方程的解析1.5 线性回归就是求loss函数的最小值 2. 如何求函数最小值2.1 一个例子2.2 求导法——求最小值2.3 求…

Win-ARM联盟的端侧AI技术分析

Win-ARM联盟&#xff0c;端侧AI大幕将起 微软震撼发布全球首款AI定制Windows PC——Copilot PC&#xff0c;搭载全新NPU与重塑的Windows 11系统&#xff0c;纳德拉盛赞其为史上最快、最强、最智能的Windows PC。该设备算力需求高达40TOPS&#xff0c;支持语音翻译、实时绘画、文…

1Panel 安装常见问题与解决方案指南

安装 参考 1Panel 文档 - 在线安装 部分&#xff0c;这里仅作常见安装失败的问题解析。 常见Q&A 收集自 1Panel微信群&#xff0c;论坛以及GitHub issue Q1. 安装过程中提示 docker 安装失败 [1Panel Log]: … 启动 docker Failed to enable unit: Unit file docker.ser…

哪些行业更需要TPM管理咨询公司?

当下&#xff0c;TPM&#xff08;全面生产维护&#xff09;作为一种旨在提高设备效率、降低维护成本的管理理念&#xff0c;已经被越来越多的行业所认可和采纳。然而&#xff0c;不同行业因其特性和需求的不同&#xff0c;对TPM管理咨询公司的需求也各有侧重。下面将探讨哪些行…

MVC架构

MVC架构 MVC架构在软件开发中通常指的是一种设计模式&#xff0c;它将应用程序分为三个主要组成部分&#xff1a;模型&#xff08;Model&#xff09;、视图&#xff08;View&#xff09;和控制器&#xff08;Controller&#xff09;。这种分层结构有助于组织代码&#xff0c;使…

Ubuntu22.04.4 LTS系统/安装Anaconda【GPU版】

安装过程 1.wget命令行下载 下载Anaconda并保存文件至本地指定目录 wget -c https://repo.anaconda.com/archive/Anaconda3-2023.09-0-Linux-x86_64.sh -P ~/Downloads/anaconda3 查看是否下载好了 2.安装Anaconda 2.1 bash命令安装 bash后面是anaconda3下载好的路径 bash …