首页 > 其他分享 >洛谷题单指南-动态规划3-Zuma

洛谷题单指南-动态规划3-Zuma

时间:2024-05-12 10:32:14浏览次数:27  
标签:指南 子串 初始化 int 洛谷题 memset Zuma dp 回文

原题链接:https://www.luogu.com.cn/problem/CF607B

题意解读:从一组整数中取连续的回文子串,求最少几次可以取完。

解题思路:

状态表示:设dp[i][j]表示取i~j之间的回文子串所需的最少次数,a[i]表示第i个数

状态转移:

如果a[i] == a[j],dp[i][j] = dp[i+1][j-1],因为首尾如果相等,其必然可以和i+1~j-1中最后一个回文子串一起取走。

如果不考虑a[i]和a[j]的关系,采用区间dp的思想,设k取i~j-1之间所有数,有dp[i][j] = min(dp[i][k] + dp[k+1][j])

因此,上面两种情况共同求min即可。

初始化:

由于dp[i][j]依赖dp[i+1][j-1],所以i~j之间的长度至少从3起,需要对长度是1、2的情况进行初始化

由定义可知dp[i][i] = 1,dp[i][i+1] = 1(当a[i] == a[i+1])或2(当a[i] != a[i+1])

又因为要计算最小值,dp[i][j]最开始要初始化为最大值:memset(dp, 0x3f, sizeof(dp))

结果:dp[1][n]

100分代码:

#include <bits/stdc++.h>
using namespace std;

const int N = 505;
int n;
int a[N];
int dp[N][N]; //dp[i][j]表示取i~j之间的回文子串所需的最少次数

int main()
{
    cin >> n;
    for(int i = 1; i <= n; i++) cin >> a[i];
    memset(dp, 0x3f, sizeof(dp));
    for(int i = 1; i <= n; i++) dp[i][i] = 1;
    for(int i = 1; i < n; i++) dp[i][i+1] = (a[i] == a[i+1] ? 1 : 2);
    for(int len = 3; len <= n; len++)
    {
        for(int i = 1; i + len - 1 <= n; i++)
        {
            int j = i + len - 1;
            if(a[i] == a[j]) dp[i][j] = dp[i+1][j-1];
            for(int k = i; k < j; k++)
            {
                dp[i][j] = min(dp[i][j], dp[i][k] + dp[k+1][j]);
            }
        }
    }
    cout << dp[1][n];
    return 0;
}

 

标签:指南,子串,初始化,int,洛谷题,memset,Zuma,dp,回文
From: https://www.cnblogs.com/jcwy/p/18187547

相关文章

  • autoit au3 IT管理员使用指南(一)基础安装、测试、编译
    简介AutoIt是一款完全免费的Windows自动化工具,支持各种Windows操作系统,可以用于自动运行基于GUI和非GUI程序,与系统进行交互,以及创建自定义的GUI窗体,完成各种自动化任务。对我们IT管理员来说,什么办公自动化就算了,我们用的最多的其实是安装软件。曾到处收集软件安装时的静默......
  • ImDisk高级指南:打造你的专属虚拟磁盘空间
    一、ImDisk使用详解创建虚拟磁盘:使用命令行参数创建虚拟磁盘。例如,imdisk-a-s10m-mB:命令将创建一个大小为10MB的虚拟磁盘,并将其分配给B盘符。你可以使用-s参数指定虚拟磁盘的大小,支持的单位包括b、k、m、g、t等,或者使用%表示可用内存的百分比。使用-p参数可以指......
  • Bionet_WIFI使用指南
    Bionet_WIFI使用指南适用对象:文宣楼A406课题组成员A406房间包含两个独立的路由器,分别有1000Mb的带宽。其SSID(名字)如下:使用的时候,应选择排名比较靠前的WIFI使用,越靠前来说信号越好,速度越快。获取本机的真实MAC地址路由器开启了连接管控,可以找谭然、或者我来执行绑定和连接。......
  • 准实时数仓搭建指南:以仓储式会员商超为模拟场景
    在电商和新零售持续冲击传统零售商超的今天,仓储式会员店反而成功逃脱曾经的“水土不服”预测,业绩一路向好。与此同时,随着人工智能、大数据、智慧物流等技术的不断革新,零售批发的消费场景也进一步拓展,对数据分析的要求也越发迫切。本文将以巴基斯坦Metro的数仓项目为例,以操作指......
  • Django 静态文件管理与部署指南
    title:Django静态文件管理与部署指南date:2024/5/1017:38:36updated:2024/5/1017:38:36categories:后端开发tags:WebOptCDN加速DjangoCompressWebpackStaticDeployCICD-ToolsSecStatic第一章:介绍Django静态文件的概念和重要性在Web开发中,静态文件......
  • 深入探索JavaScript中的structuredClone:现代深拷贝的解密指南
    在JavaScript中,实现深拷贝的方式有很多种,每种方式都有其优点和缺点。今天介绍一种原生JavaScript提供的structuredClone实现深拷贝。下面列举一些常见的方式,以及它们的代码示例和优缺点:1.使用JSON.parse(JSON.stringify(obj))代码示例:functiondeepClone(obj){re......
  • 洛谷题单指南-动态规划3-P1775 石子合并(弱化版)
    原题链接:https://www.luogu.com.cn/problem/P1775题意解读:计算合并石子的最小代价,区间DP。解题思路:状态表示:dp[i][j]表示将第i~j堆石子合并的最小代价,m[i]表示第i堆石子质量,s[i]表示前i堆石子质量前缀和状态转移:考虑最后一次合并,设最后一次合并是将i~k合成的一堆与k+1~j合成......
  • 字符串入门指南
    前言此文章带领入门基础字符串,内容从KMP到SA,其中包含算法文章推荐/算法讲解,经典题目的讲解。带!号的题是基础例题,带*号的是推荐首先完成的题(有一定启发性的)。本题单以每种字符串算法为大结构。manacher!P3805【模板】manacher好的博客code#include<bits/stdc++.h>u......
  • 洛谷题单指南-动态规划2-P3147 [USACO16OPEN] 262144 P
    原题链接:https://www.luogu.com.cn/problem/P3147题意解读:将一组数据两两相邻且相同的合并,合并成一个数值+1的数,求合并后的最大值。解题思路:考虑合并后的最大数i,其最后一次必然是由两个i-1合并而来的设dp[i][j]表示以j为左端点,合并最大值为i时的右端点的下一个位置如图:dp[i......
  • curl 的用法指南
    简介curl是常用的命令行工具,用来请求Web服务器。它的名字就是客户端(client)的URL工具的意思。它的功能非常强大,命令行参数多达几十种。如果熟练的话,完全可以取代Postman这一类的图形界面工具。本文介绍它的主要命令行参数,作为日常的参考,方便查阅。内容主要翻译自《curl......