【习题】【区间dp习题】AcWing 320.能量项链(详细地解释了状态转移中的k)

2006年NOIP提高组 能量项链 题目描述 Description在Mars星球上,每个Mars人都随身佩带着一串能量项链。在项链上有N颗能量珠。能量珠是一颗有头标记与尾标记的珠子,这些标记对应着某个正整数。并且,对于相邻的两颗珠子,前一颗珠子的尾标记一定等于后一颗珠子的头标记。因为只有这样,通过吸盘(吸盘是Mars人吸收能量的一种器官)的作用,这两颗珠子才能聚合成一颗珠子,同时释放出可以被吸盘吸收的能量。如果前一颗能量珠的头标记为 阅读详情

能量项链

Question:AcWing 320.能量项链

Question Link:acwing.com/problem/content/322

Algorithm:区间dp

Question Description

在 Mars 星球上,每个 Mars 人都随身佩带着一串能量项链,在项链上有 N 颗能量珠。

能量珠是一颗有头标记与尾标记的珠子,这些标记对应着某个正整数。

并且,对于相邻的两颗珠子,前一颗珠子的尾标记一定等于后一颗珠子的头标记。

因为只有这样,通过吸盘(吸盘是 Mars 人吸收能量的一种器官)的作用,这两颗珠子才能聚合成一颗珠子,同时释放出可以被吸盘吸收的能量。

如果前一颗能量珠的头标记为 m,尾标记为 r,后一颗能量珠的头标记为 r,尾标记为 n,则聚合后释放的能量为 m×r×n(Mars 单位),新产生的珠子的头标记为 m,尾标记为 n。

需要时,Mars 人就用吸盘夹住相邻的两颗珠子,通过聚合得到能量,直到项链上只剩下一颗珠子为止。

显然,不同的聚合顺序得到的总能量是不同的,请你设计一个聚合顺序,使一串项链释放出的总能量最大。

例如:设 N=4,4 颗珠子的头标记与尾标记依次为 (2,3)(3,5)(5,10)(10,2)。

我们用记号 ⊕ 表示两颗珠子的聚合操作,(j⊕k) 表示第 j,k 两颗珠子聚合后所释放的能量。则

第 4、1 两颗珠子聚合后释放的能量为:(4⊕1)=10×2×3=60。

这一串项链可以得到最优值的一个聚合顺序所释放的总能量为 ((4⊕1)⊕2)⊕3)=10×2×3+10×3×5+10×5×10=710。

输入格式

输入的第一行是一个正整数 N,表示项链上珠子的个数。

第二行是 N 个用空格隔开的正整数,所有的数均不超过 1000,第 i 个数为第 i 颗珠子的头标记,当 i<N 时,第 i 颗珠子的尾标记应该等于第 i+1 颗珠子的头标记,第 N 颗珠子的尾标记应该等于第 1 颗珠子的头标记。

至于珠子的顺序,你可以这样确定:将项链放到桌面上,不要出现交叉,随意指定第一颗珠子,然后按顺时针方向确定其他珠子的顺序。

输出格式

输出只有一行,是一个正整数 E,为一个最优聚合顺序所释放的总能量。

数据范围

4≤N≤100,
1≤E≤2.1×109

输入样例:

4
2 3 5 10

输出样例:

710

Question Description没有任何高亮,非常建议大家通过链接看题目描述。

思路:

  1. 环拆链加倍(很容易想到)
  2. 我们把例如:设 N=4N=4N=4,444 颗珠子的头标记与尾标记依次为 (2,3)(2,3)(2,3)(3,5)(3,5)(3,5)(5,10)(5,10)(5,10)(10,2)(10,2)(10,2)
    环拆链后记为 222 333 555 101010 222 333 555 101010
    那么两个数(即头和尾)即代表一个珠子,那么易知对于
    (2,3)(2,3)(2,3)(3,5)(3,5)(3,5)(5,10)(5,10)(5,10)(10,2)(10,2)(10,2)四个珠子来说其表示应为222 333 555 101010 222
    即用上述方法记,环拆链后记为的数组 首数和尾数只是单独的头和尾,其他的数即使其前面的数的尾又是其后面数的头
  3. 枚举长度lenlenlen,若len==2len==2len==2则说明这是一颗珠子,一颗珠子没有最大能量,故初始化为0;
  4. 对于转移,例如
    微信图片_20220218215206.png
    当k=l+1k=l+1k=l+1时,
    左面dp[l][k]dp[l][k]dp[l][k]即为一颗珠子,那么其值为0,合成后为lll kkk
    右面dp[k][r]dp[k][r]dp[k][r],其值为dp[k][r]dp[k][r]dp[k][r],合成后为kkk rrr
    最终合并 lll kkk rrr,其值为 w[l]×w[r]×w[k]w[l]×w[r]×w[k]w[l]×w[r]×w[k]
    对于例图这种情况,此时dp[l][r]=130=0+100+30dp[l][r]=130=0+100+30dp[l][r]=130=0+100+30,
    (对于例图这种情况即dp[2][4]应为150,请自己计算下k=3的那种情况)
    …
    我们可以得到这样的转移方程
    dp[l][r]=max(dp[l][r],dp[l][k]+dp[k][r]+w[l]×w[r]×w[k])dp[l][r]=max(dp[l][r],dp[l][k]+dp[k][r]+w[l]×w[r]×w[k])dp[l][r]=max(dp[l][r],dp[l][k]+dp[k][r]+w[l]×w[r]×w[k])
  5. 注意只有dp[l][r]=dp[l][l+n]dp[l][r]=dp[l][l+n]dp[l][r]=dp[l][l+n]的状态才是合法状态,其他的状态一论不合法。
  6. 闫氏dp分析法( 状态计算请看4. ):
    ysdp.png

Code:

#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=210;//环拆链
int dp[N][N],w[N];//DoNotUse w[0]
int e,n;
int main()
{
    cin >> n;
    for (int i = 1; i <= n; i++)
    {
        cin >> w[i] ;
        w[n+i]=w[i];
    }
    for (int len = 2; len <= n+1; len++)//len==2即为一个单个的珠子
    {
        for (int l = 1; l+len-1 <= 2*n; l++)
        {
            int r=l+len-1;
            if(len==2)//就一个珠子
            {
                dp[l][r]=0;
                continue;
            }
            for (int k = l+1; k < r; k++)
            {
                dp[l][r]=max(dp[l][r],dp[l][k]+dp[k][r]+w[l]*w[k]*w[r]);
            }
            
        }
        
    }
    int ans=0;
    for (int l = 1; l <= n; l++) ans=max(ans,dp[l][l+n]);
    cout << ans << endl;
}


如有疑问欢迎在评论区留言或者通过Email联系我

My Email:Wizzy-Ang@qq.com

欢迎大家关注我的个人公众号WizzyAngShare,(还有个人博客)

我会在这里分享编程语言语法,算法,及区块链的相关知识,还有各种奇奇怪怪的小知识等着你~
虽然现在这个公众号有亿点草率 ,我会努力更新的~~~

OpenCode:开源代码智能代理平台的全面解析 OpenCode是一个开源代码智能代理平台,采用模块化微服务架构,支持多种AI模型集成。该系统包含前端交互层、代理服务层和模型集成层,提供Build、Plan和General三种代理模式,分别负责代码编写、分析和复杂任务处理。OpenCode支持跨平台安装,具备权限验证、上下文感知等安全机制,并集成LSP协议实现深度代码理解。相比竞品,其开源特性、终端优先设计和提供商无关架构具有明显优势,适用于个人开发、团队协作等多种场景,为开发者提供强大的AI辅助编程能力。 阅读详情

相关推荐

一窥Memory测试算法及自我修复机制

摘要 为了满足新一代设备的需求,Memory的大小每三年就会增加4倍。深亚微米设备包含大量面积更小、访问速度更快的Memory。针对此类设计制定自动测试策略可以减少ATE(自动测试设备)的时间和成本。 内存故障的行为与经典的“Stuck-At”故障不同。因此,Memory的故障模型(由于其阵列结构)与标准逻辑的设计也是不同的。Memory测试除了进行故障检测和定位,还可以实现用冗余单元对...

路科验证 2万+

「一本通 5.1 例 2」能量项链 ( 区间 dp + 头尾处理 + 环处理 )

题目描述 原题来自:NOIP 2006 在 Mars 星球上,每个 Mars 人都随身佩带着一串能量项链。在项链上有 N颗能量珠。能量珠是一颗有头标记和尾标记的珠子,这些标记对应着某个正整数。并且,对于相邻的两颗珠子,前一颗珠子的尾标记必定等于后一颗珠子的头标记。因为只有这样,通过吸盘——Mars 人吸收能量的器官的作用,这两颗珠子才能聚合成一颗珠子,同时释放出可被吸盘吸收的能量。如果一颗能量珠头标记为 m,尾标记为 r,后一颗能量珠头标记为r ,尾标记为n ,则聚合后释放出 m * r *n Mars单

Piink的博客 839

保姆级教程:用再生龙Clonezilla Live给Ubuntu系统做全盘备份与恢复(含BIOS设置避坑)

本文提供了一份详细的Clonezilla Live教程,指导Ubuntu用户如何轻松完成全盘备份与恢复。从启动盘制作、BIOS设置避坑到备份参数解析和恢复操作,涵盖了所有关键步骤和常见问题解决方案,帮助用户高效保护系统数据。

weixin_42116058的博客 639

能量项链(蓝桥杯)--区间dp

蓝桥杯算法提高-能量项链 - C语言网例如:设N=4,4颗珠子的头标记与尾标记依次为(2,3) (3,5) (5,10) (10,2)。我们用记号⊕表示两颗珠子的聚合操作,(j⊕k)表示第j,k两颗珠子聚合后所释放的能量。则第4、1两颗珠子聚合后释放的能量为:(4⊕1)=10*2*3=60。我们要求得是这一串珠子聚合后能释放能量的最大值。这一串项链可以得到最优值的一个聚合顺序所释放的总能量为((4⊕1)⊕2)⊕3)=10*2*3+10*3*5+10*5*10=710。首先要将环形变成线性,将数组复制一遍,第

weixin_45772744的博客 387

S32K314 EB配置MCAL全模块讲解【Autosar——1 MCU模块详解】持续更新中

FIRC(fast internal RC Oscillator) :高速内部时钟,固定48MHZ;SIRC(Slow Internal RC Oscillator):低速内部时钟,固定32KHZ;FXOSC(Fast Crystal Oscillator Digital Controller):高速外部晶振(8-40MHZ),根据原理图选型进行配置;SXOSC():外部低速外部时钟,固定输入32.768KHZ;PLL_PHIn_CLK:时钟倍频锁相环时钟范围(640-1280MHZ);

qq_40488886的博客 1781

STM32F407最小系统硬件设计与CubeMX工程实践

嵌入式最小系统是MCU功能实现的物理基础,其核心涵盖供电网络、时钟架构、复位机制与调试接口四大模块。基于Cortex-M4内核的STM32F407对电源纹波、晶振稳定性及信号完整性提出严苛要求:模拟电源VDDA需<10mV纹波,HSE晶振布线须满足短距直连与匹配电容精准配置,SWD调试接口依赖50Ω阻抗控制与端接防护。这些硬件约束直接映射至STM32CubeMX配置——如RCC时钟树参数必须与实物晶振频率严格一致,GPIO模式需匹配外设电气特性(如I2C必选开漏),否则将引发通信失败或启动异常。典型应用场景

weixin_35592186的博客 173

【动态规划】能量项链

【动态规划】能量项链 【动态规划】能量项链 时间限制: 1 Sec内存限制: 64 MB 题目描述 每个天顶星人都随身佩戴着一串能量项链,在项链上有N颗能量珠。能量珠是一颗有头标记与尾标记的珠子,这些标记对应着某个正整数。并且,对于相邻的两颗珠子,前一颗珠子的尾标记一定等于后一颗珠子的头标记。因为只有这样,通过吸盘(吸盘是天顶星...

weixin_43249938的博客 601

Arcgis模型构建器01——写一个简单的模型

在使用模型构建器解决这个需求之前,我们要想清楚如果我们手动解决的话,应该如何去处理,因为构建模型的过程正是基于我们手动处理的过程来构建的。我有一个全国的dem影像数据和一个陕西省边界范围矢量,现在我想获取陕西省的dem影像的坡度数据。填写完之后点击确定,我们发现,两个输入数据和工具连接起来了,并且通过裁剪工具得到一个中间结果,即。我们发现工具框和中间数据框都存在阴影,说明已经运行过了这个模型,不报错就说明模型运行成功!现在我们就把数据和工具都串联起来了,成功构建好了模型。

爱吃雪糕的小布丁的博客 918

能量项链——石子归并(2)

能量项链 【问题描述】 在Mars星球上,每个Mars人都随身佩带着一串能量项链。在项链上有N颗能量珠。能量珠是一颗有头标记与尾标记的珠子,这些标记对应着某个正整数。并且,对于相邻的两颗珠子,前一颗珠子的尾标记一定等于后一颗珠子的头标记。因为只有这样,通过吸盘(吸盘是Mars人吸收能量的一种器官)的作用,这两颗珠子才能聚合成一颗珠子,同时释放出可以被吸盘吸收的能量。如果前一颗能量珠的头标记为m...

weixin_34240520的博客 394

YOLOv8交通监控全方案:精准车辆计数+违章(闯红灯/压线)识别,拿来就落地!

作为深耕计算机视觉落地的开发者,我见过太多交通监控的“伪智能”——传统系统要么车辆计数不准(漏计/重复计数),要么违章识别滞后(靠人工回看录像),甚至连“闯红灯、压线”这类常见违章都无法实时判定,完全满足不了实际交通管理需求。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 646

mabl:AI原生测试自动化平台的基础使用

mabl是一个基于人工智能和机器学习的云原生测试自动化平台。它通过使用先进的技术,如机器学习,自动创建和执行测试,自动分析测试结果,并根据需求的变化自动适配和维护测试。这样的自动化过程极大地提高了软件测试的效率和准确性。mabl的口号是 “You write code, mabl tests”,意味着开发者只需关注编写代码,而测试工作则可以交给mabl来完成。mabl的平台支持多种测试类型,包括 Web、App、Api、可访问性和性能测试,使得团队能够更快速、更有信心地发布软件。

blues_C的博客 3657

区间DP——AcWing 320. 能量项链

区间 DP 是动态规划的一种特殊形式,主要用于解决在一段区间上进行操作或决策的问题。

u014114223的博客 1443

111. 如何创建 SAP ABAP 锁对象(Lock Object)和加锁以及解锁函数

至此,我们完成了 ABAP 系统锁机制和加锁解锁函数的介绍。有了这些基础知识,大家就能在实际工作中,使用 Lock Object 和加锁解锁函数,编写出支持并发访问控制的 ABAP 应用程序了。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1533

Acwing-320.能量项链(区间dp) C++

1.题目解释: 将一串能量珠合并成一颗能够释放的能量最大值的能量珠。 2.状态转移公式: dp[i][j]=max(dp[i][j],dp[i][k]+dp[k+1][j]+a[i]*a[k+1]*a[j+1]) 用dp[i][j]来代表区间(i,j)内所有珠子合成的这一颗能量珠所可能释放的最大能量。 合并珠子即合并左珠dp[i][k]和右珠dp[k+1][j],释放能量a[i]∗a[k+1]∗a...

Mr_Poseidon的博客 978

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Acwing 320.能量项链【区间DP(环拆链)】

1.题目 题目链接:点这儿! 2.解决方法 区间DP是有固定模板的DP类型,它解决的问题都有合并区间(或理解为序列元素)求最优耗费这种模式,而且往往给定的是一个序列,像一个链条一样。但是如果链条的首尾串起来,变成环,该怎么运用区间DP的套路?可以将给定序列复制一倍放在序列的后面,这样做来模拟在环上操作。这样我们得到的最优解需要从通过状态转移方程计算出的f(1,n),f(2,n+1),…,f(i,n+i-1)中寻找。 3.代码 #include <iostream> #include <cs

kingdom365的博客 282

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

数据结构与算法学习笔记(Acwing 提高课)----动态规划·区间DP

区间DP的特征在于子结构一般是一个子区间上的问题,涉及到的问题也非常多,如环形区间,记录方案数,高精度,二维区间等等。这次的题目基本包含了这些知识点的处理方法。

weixin_60278491的博客 1078

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

AcWing 320. 能量项链(区间dp + 环形处理)

这道题使用区间

CK1513710764的博客 294

区间dp模型整理

我们据此来看[2,10]实际划分成了[2,5],[5,10],能量是2*5*10,[2,5]划分成了[2,3],[3,5],花费是2*3*5,那么推广开来:dp[l][r]=dp[l][k]+dp[k][r]+l*k*r.那么这里我们换一种方法来进行循环,我们第一维循环区间长度,第二维循环左端点位置,由此可以算出右端点位置,然后第三维循环划分位置k,这样的话,我们划分用到的一定是更短的区间,更短的区间我们之前算过,就不会出问题。要求每一块儿的平方,首先得求出每一块儿的值,这里可以用二维前缀和来实现。

m0_74120503的博客 993

2024-02-18(区间DP)

加add() 减subtract() 乘multiply() 除divide() 两者取最小min() 两者取最大max()先把环形展开,形成一条链,再复制一遍。其中状态划分的依据就是哪个点是根节点。

m0_73165551的博客 465

codevs 1154 能量项链

题目描述 Description 在Mars星球上,每个Mars人都随身佩带着一串能量项链。在项链上有N颗能量珠。能量珠是一颗有头标记与尾标记的珠子,这些标记对应着某个正整数。并且,对于相邻的两颗珠子,前一颗珠子的尾标记一定等于后一颗珠子的头标记。因为只有这样,通过吸盘(吸盘是Mars人吸收能量的一种器官)的作用,这两颗珠子才能聚合成一颗珠子,同时释放出可...

dataxiang6224的博客 137

区间DP

1.区间DP的概念: 区间DP也属于线性DP中的一种,它以“区间长度”作为DP的“阶段”,使用两个坐标(区间的左、右端点)描述每个维度。在区间DP中,一个状态由若干个比它更小且包含于它的区间所代表的状态转移而来,因此区间DP的决策往往就是划分区间的方法。区间DP的初态一般就由长度为1的“元区间”构成。 ...

sxhlrLX的博客 288

区间DP-------------能量项链

在Mars星球上,每个Mars人都随身佩带着一串能量项链,在项链上有 N 颗能量珠。 能量珠是一颗有头标记与尾标记的珠子,这些标记对应着某个正整数。 并且,对于相邻的两颗珠子,前一颗珠子的尾标记一定等于后一颗珠子的头标记。 因为只有这样,通过吸盘(吸盘是Mars人吸收能量的一种器官)的作用,这两颗珠子才能聚合成一颗珠子,同时释放出可以被吸盘吸收的能量。 如果前一颗能量珠的头标记为m,尾标记为r,后一颗能量珠的头标记为 r,尾标记为 n,则聚合后释放的能量为 mrn(...

qq_45772483的博客 281

【区间动规】【记忆化搜索】能量项链

题目:能量项链 rqnoj5 题目描述   在Mars星球上,每个Mars人都随身佩带着一串能量项链。在项链上有N颗能量珠。能量珠是一颗有头标记与尾标记的珠子,这些标记对应着某个正整数。并且,对于相邻的两颗珠子,前一颗珠子的尾标记一定等于后一颗珠子的头标记。因为只有这样,通过吸盘(吸盘是Mars人吸收能量的一种器官)的作用,这两颗珠子才能聚合成一颗珠子,同时释放出可以被吸盘吸收的能量...

diying4157的博客 266

G - 项链 (区间dp)

原先题目写错了,已改过来了,下面是题目链接:F-游戏人生题目链接:G - 项链G - 项链 Time Limit:1000MS Memory Limit:131072KB 64bit IO Format:%lld & %llu SubmitStatus Description 在Mars星球上,每个Mars人都随身佩带着一串能量项链。在项链上有N颗能量珠。能量珠是一颗有头标记与尾标记

nhl19961226的博客 337

P1063 能量项链

题目描述 在Mars星球上,每个Mars人都随身佩带着一串能量项链。在项链上有N颗能量眼珠。能量眼珠是一颗有头标记与尾标记的眼珠子,这些标记对应着某个正整数。并且,对于相邻的两颗眼珠子, 前一颗眼珠子的尾标记一定等于后一颗眼珠子的头标记。因为只有这样,通过吸盘(吸盘是Mars人吸收能量的一种器官)的作用,这两颗眼珠子才能聚合成一颗眼珠子,同时释放出可以被吸 盘吸收的能量。如果前一颗能量眼珠的...

weixin_30293079的博客 202

FPGA+STM32双核雷达系统设计:PLFM调频与高速ADC实时处理

相控阵雷达系统依赖高精度、低延迟的信号生成与回波处理,其核心在于调频波形控制、高速数据采集与确定性实时协同。PLFM(相位线性调频)通过DDS精确调控瞬时相位斜率,规避传统FMCW中VCO非线性与温漂难题;而125MSPS级ADC原始数据流远超MCU接口带宽极限,必须由FPGA完成LVDS接收、数字下变频与FFT等纳秒级任务。FPGA与STM32分工架构由此成为工业级毫米波雷达的工程刚需——前者保障硬实时信号链,后者提供协议栈、人机交互与轻量后处理能力。该模式广泛适用于嵌入式雷达终端、边缘感知网关及毕业设计

weixin_34204722的博客 274
上一篇: 【习题】【最短路径习题】AcWing 1375.奶牛回家 两种方法
下一篇: 【习题】【最小生成树习题】LaoQiao C/C++ Group B 2020.4 9.通电
1Wizzy
博客等级 码龄7年 446粉丝 14原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值