AcWing 1068. 环形石子合并(环形区间DP)

news2024/12/24 0:29:33

AcWing 1068. 环形石子合并(环形区间DP)

  • 一、问题
  • 二、思路
  • 三、代码

一、问题

在这里插入图片描述

二、思路

在讲解这道题之前,我们需要先掌握线性的区间DP问题,如果对于线性区间DP的解决方式还不了解的话,建议先看一下这篇文章:石子合并(区间DP)

那么在了解了线性石子合并问题后,我们现在只剩下了一个难点:如何将环形转化为线性。

我们看下面图:
在这里插入图片描述

如果我们想要合并A和B的话,我们就在两堆石子之前连接一条线,那么当我们将这一圈石子合并为1堆的时候,情况如下图所示:
在这里插入图片描述

而这恰好就相当于一个线性的石子围成了一个圈,只不过我们的合并方式不同,最终剩下的缺口也不同。

那么我们就可以去枚举每一个缺口,展开为线性,最终在这么多种情况中选出一个最大的。

但是我们发现,我们的缺口有n个,那么这就说明,我们要在之前的区间DP的时间复杂度上再乘上一个n。

很显然这样的做法是不太高效的。

那么怎么办呢?

我们接着看下面这个图:
在这里插入图片描述
我们发现我们把这个字符串写两遍,这样我们就能在这个2n长度的石子中找到我们枚举的情况。

那么我们就在这个2n长度的石子中进行合并。

按照我们之前区间DP的状态定义,我们令 f [ l ] [ r ] f[l][r] f[l][r]表示将区间l到r内的石子合并为1堆所需要的最小值。

我们只需要去枚举所有的长度为n的f[l][r],然后取出一个最大值。

三、代码

我们在求最小值的时候需要注意初始化为正无穷的问题。

#include<bits/stdc++.h>
using namespace std;
const int N = 510;
const int INF = 0x3f3f3f3f;
int a[N], f[N][N], g[N][N];
int n;
int main()
{
	cin >> n;
	for(int i = 1; i <= n; i ++ )
	{
		cin >> a[i];
		a[i + n] = a[i];
	}
	
	for(int i = 1; i <= 2 * n; i ++ )
	{
		a[i] = a[i - 1] + a[i];
	}

	for(int  len = 2; len <= n; len ++ )
	{
		for(int l = 1; l + len - 1 <= 2 * n; l ++ )
		{
			int r = l + len -1;
			g[l][r] = INF;
			for(int k = l; k < r; k ++ )
			{
				f[l][r] = max(f[l][r], f[l][k] + f[k + 1][r] + a[r] - a[l - 1]);
				g[l][r] = min(g[l][r], g[l][k] + g[k + 1][r] + a[r] - a[l - 1]);
			}
		}
	}
	int maxv = -INF, minv = INF;
	for(int l = 1; l + n - 1 <= 2 * n; l ++ )
	{
		int r = l + n - 1;
		if(maxv < f[l][r])maxv = f[l][r];
		if(minv > g[l][r])minv = g[l][r];
	} 
	cout << minv << endl << maxv << endl;

}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

概论第7章_参数估计_点估计的评价标准_相合性_无偏性_有效性

点估计的评价标准包括&#xff1a; 相合性&#xff0c; 无偏性&#xff0c; 有效性。 一. 相合性 衡量一个估计是否可行的必要条件&#xff0c; 就是估计的相合性。 本文不提其定义了。直接给出一些结论。 结论 设有正态总体N(μ,σ2\mu, \sigma^2μ,σ2) 的样本&#xff0c;…

数据结构资料汇编:栈

数据结构资料汇编&#xff1a;栈 定义 栈&#xff08;stack&#xff09;是限定仅在表尾进行插入或删除操作的线性表。 表尾称为栈顶&#xff08;top&#xff09;&#xff0c;可以进行插入或删除操作 栈的插入操作称为进栈或入栈&#xff08;push&#xff09;栈的删除操作成为出…

Google Play 上的 Shady Reward 应用累积了 2000 万次下载

一种新的活动跟踪应用程序类别最近在 Android 的官方应用程序商店 Google Play 上取得了巨大成功&#xff0c;已在超过 2000 万台设备上下载。 这些应用程序将自己宣传为健康、计步器和养成良好习惯的应用程序&#xff0c;承诺为用户在日常生活中保持活跃、达到距离目标等提供…

字节青训前端笔记 | 跨端技术概述

本节课程内容会分为以下几个方面&#xff1a; 跨端是什么&#xff0c;给大家介绍跨端产生的背景及解决的问题跨端技术方案介绍&#xff0c;给大家介绍目前主流的跨端技术方案&#xff08;hybrid 方案/原生渲染方案/自渲染方案/小程序方案&#xff09;以及对比基于小程序跨端实…

苹果或将打造 “空气键盘”

苹果MR头显玩法大揭秘前言苹果MR头显要来了打造 “空气键盘”眼动追踪与手部追踪一键切换VR/AR模式前言 随着2021年10月FaceBook正式改名Meta后&#xff0c;标志着元宇宙元年的正式到来&#xff0c;元宇宙行业开始出现井喷式的爆发。再到2022年10月&#xff0c;“飞天云动”在…

欧科云链链上卫士:2023年1月安全事件盘点

一、基本信息 2023年1月安全事件共造成约1438万美元损失&#xff0c;相比上个月的安全事件损失金额大幅度下降。其中多链项目LendHub 被攻击&#xff0c;损失高达600万美元&#xff0c;为本月资金损失最大的安全事件。本月RugPull数量基本与上月持平。社媒诈骗等事件依然频发&a…

分布式微服务3

目录 Feign远程调用 基于Feign远程调用 Feign替代RestTemplate 1.引入依赖 2.添加注释 3.编写Feign的客户端 4.测试 5.总结 自定义配置 1.引入依赖 2.配置连接池 3.总结 Gateway网关 Gateway快速入门 1.创建gateway服务&#xff0c;引入依赖 2.编写启动类 3.编写…

【微服务】Nacos集群搭建

Nacos集群搭建1.集群结构图2.搭建集群2.1.初始化数据库2.2.下载nacos2.3.配置Nacos2.4.启动2.5.nginx反向代理2.6.优化1.集群结构图 官方给出的Nacos集群图&#xff1a; 其中包含3个nacos节点&#xff0c;然后一个负载均衡器代理3个Nacos。这里负载均衡器可以使用nginx。 我们…

实战:进入Linux系统 紧急模式,重置root密码

实战:进入CentOS 7紧急模式,重置root密码 实战场景:公司的一台CentOS 7系统忘记root密码了,需要快速把root密码修改为 qwer,找回root身份。 (1)重启系统,在出现内核选择界面时(在此界面中,如果不按键盘的上下方向键,则在默认时间过去后,自动选择光标所选的内核并…

题库——“计算机基础”

小雅兰为开学考试而奋斗 模块一 计算机基础概述 &#xff08;1&#xff09;信息技术基本知识 &#xff08;2&#xff09;计算机的发展与应用 &#xff08;3&#xff09;计算机的工作原理 &#xff08;4&#xff09;计算机系统的组成 &#xff08;5&#xff09;微型计算机主要硬…

九龙证券|AIGC彻底火了,概念股全线上涨,走势领先者三连板!

一夜之间&#xff0c;AIGC走红A股&#xff0c;谁会成为商场宠儿&#xff1f; A股历来盛行炒作新体裁&#xff0c;尤其是新体裁诞生的初期&#xff0c;资金参与热心高涨&#xff0c;诞生牛股概率更高。诞生不足两月的ChatGPT便是今年以来最抢手体裁之一&#xff0c;由ChatGPT带动…

Bug:浏览器一直访问旧资源

Bug&#xff1a;浏览器一直访问旧资源 1 问题阐述 今天在查看自己部署的项目时候&#xff0c;发现浏览器总是访问旧的资源 2 排查思路 2.1 浏览器缓存问题 清除浏览器缓存 ctrl shift del2.2 tomcat问题 我的项目是部署在tomcat上的&#xff0c;因此我怀疑是tomcat的配置问…

C语言学习-ProtoThread

一、简介随着RTOS的应用&#xff0c;程序在开发的时候&#xff0c;程序逻辑也变得越来越清晰。但是RTOS因为体量比较大&#xff0c;在一些内存比较小的MCU中无法应用。所以&#xff0c;在裸机的开发中&#xff0c;通常是使用一个while(1)来作为整个程序的大循环。当有条件需要执…

Vue路由传递query参数的两种方式

路由是可以传递参数的&#xff0c;一般使用query进行传参&#xff0c;有两种方式&#xff0c;接下来一一展示 案例展示 先编写一个简单的案例 我这里用的一个三级路由 这里使用三级路由以及展示路由视图 这样点击就跳转对应的路径了&#xff0c;接下来进行路由跳转的时候传参…

python之selenium入门教程

selenium&#xff0c;一个第三方库&#xff0c;可以通过给driver发送命令来操作浏览器&#xff0c;以达到模拟人操作浏览器&#xff0c;实现网页自动化、测试等&#xff0c;减少了重复性工作。 selenium的工作的基本架构如下&#xff1a; 安装 本文是在python环境下使用sele…

聚观早报 | 保时捷回应12.4万帕纳梅拉遭抢购;英特尔大规模降薪

今日要闻&#xff1a;保时捷回应12.4万帕纳梅拉遭抢购&#xff1b;特斯拉大力生产4680电池和Semi电动重卡&#xff1b;Spotify 月活用户预计下季度将达5亿里程碑&#xff1b;PayPal将裁员约2000人约占员工总数7%&#xff1b;英特尔大规模降薪 CEO基本薪酬削减25%保时捷回应12.4…

MATLAB应用3——深度视觉 奥比中光Astra S显示RGB和深度信息

首先从官网下载OpenNI驱动并安装&#xff0c;以及添加环境变量。MATLAB代码&#xff1a;% 参考&#xff1a;https://blog.csdn.net/limingmin2020/article/details/109445787%% 首次使用需编译mxNI.cpp文件&#xff0c;生成mxNI.mexw64mex mxNI.cpp -IF:\VS2017\VC\Astra_S\Ope…

Linux 内核代码审查人员短缺问题解决方法

导读操作系统安全是现在最重要的事情&#xff0c;而 Linux 则是一个主要被讨论的部分。首先要解决的问题之一就是&#xff1a;我们如何确定提交到上游的补丁已经进行了代码审核&#xff1f; Wolfram Sang 从 2008 年开始成为一名 Linux 内核开发者&#xff0c;他经常在各地召开…

Java三大特性之二——继承(工作、面试、学习必备技能)

目录 继承的概述 继承的特点 继承中的成员变量 继承中的成员方法 方法的重写 继承中的构造方法 super关键字 super和this的区别 继承的概述 多个类中存在相同属性&#xff08;成员变量&#xff09;和行为&#xff08;方法&#xff09;时&#xff0c;将这些内容抽取到单独一…

【自学Python】Python字符串以某个字符开始或结尾

大纲 Python字符串开头 Python字符串开头教程 在开发过程中&#xff0c;很多时候我们需要判断一个 字符串 是否以某个字符或者是否以某个字符串开始的需求&#xff0c;在 Python 中&#xff0c;判断某个字符串是否以某个字符或者是否以某个字符串开头的函数为 startswith() 。…