P1063 能量项链

题目描述

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

这一串项链可以得到最优值的一个聚合顺序所释放的总能量为:

\(((4⊕1)⊕2)⊕3)=10 \times 2 \times 3+10 \times 3 \times 5+10 \times 5 \times 10=710\)。

输入格式

第一行是一个正整数\(N(4≤N≤100)\),表示项链上珠子的个数。第二行是\(N\)个用空格隔开的正整数,所有的数均不超过\(1000\)。第\(i\)个数为第\(i\)颗珠子的头标记\((1≤i≤N)\),当\(i<N\)时,第\(i\)颗珠子的尾标记应该等于第\(i+1\)颗珠子的头标记。第\(N\)颗珠子的尾标记应该等于第\(1\)颗珠子的头标记。

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

输出格式

一个正整数\(E(E≤2.1 \times (10)^9)\),为一个最优聚合顺序所释放的总能量。

输入输出样例

输入 #1

4

2 3 5 10

输出 #1

710

说明/提示

NOIP 2006 提高组 第一题

【思路】

区间DP

【题目分析】

先看题目

是能量项链

项链是什么

就是一个圈,一个环

所以这里面的最后一个是和第一个紧挨着的

这就需要特殊处理了

【处理圈】

怎么处理圈呢?

将这个链复制一下放在这个链的后面

那么n就可以和n+1合并起来了

这样用区间DP求出区间最大值

【核心思路】

到时候在比较一下以1-n那一个点作为开头

区间大小为n的区间长度最大

输出最大值就好了

因为把前面这个区间复制到了后面

所以比如从2开始到n+1

其实n+1就是1

所以原数是不会变化的

方向区间DP就可以

【提示】

还有一些小细节在代码里面

【完整代码】

#include<iostream>
#include<cstdio> using namespace std;
const int Max = 204;
int a[Max];
int f[Max][Max];
int l[Max],r[Max];//记录一个点的头标记和尾标记对应的数
int main()
{
int n;
cin >> n;
for(register int i = 1;i <= n;++ i)
cin >> a[i],a[i + n] = a[i];
for(register int i = 1;i <= 2 * n;++ i)
l[i] = a[i],r[i] = a[i + 1];
for(register int i = 1;i <= 2 * n;++ i)
{
for(register int j = 1;j + i - 1 <= 2 * n;++ j)
{
int k = j + i - 1;
for(register int ll = j;ll < k;++ ll)
f[j][k] = max(f[j][k],f[j][ll] + f[ll + 1][k] + l[j] * r[ll] * r[k]);//原本的的值,和由j-ll和ll-k这两个区间合并起来之后的值哪一个更优
}
}
int M = 0;
for(register int i = 1;i <= n;++ i)
M = max(M,f[i][i + n - 1]);//比较以哪个开头更优
cout << M << endl;
return 0;
}

洛谷 P1063 能量项链 题解的更多相关文章

  1. 洛谷P1063能量项链题解

    $题目$ 不得不说,最近我特别爱刷这种区间DP题,因为这个跟其他的DP有些不一样的地方,主要是有一定的套路,就是通过小区间的状态更新大区间,从而得到原题给定区间的最优解. $但是$ 这个题应该跟$石子 ...

  2. 『题解』洛谷P1063 能量项链

    原文地址 Problem Portal Portal1:Luogu Portal2:LibreOJ Portal3:Vijos Description 在\(Mars\)星球上,每个\(Mars\)人 ...

  3. 洛谷P1063 能量项链(区间DP)(环形DP)

    To 洛谷.1063 能量项链 题目描述 在Mars星球上,每个Mars人都随身佩带着一串能量项链.在项链上有N颗能量珠.能量珠是一颗有头标记与尾标记的珠子,这些标记对应着某个正整数.并且,对于相邻的 ...

  4. 洛谷P1063 能量项链 [2006NOIP提高组]

    P1063 能量项链 题目描述 在Mars星球上,每个Mars人都随身佩带着一串能量项链.在项链上有N颗能量珠.能量珠是一颗有头标记与尾标 记的珠子,这些标记对应着某个正整数.并且,对于相邻的两颗珠子 ...

  5. 洛谷——P1063 能量项链

    P1063 能量项链 题目描述 在MarsMars星球上,每个MarsMars人都随身佩带着一串能量项链.在项链上有NN颗能量珠.能量珠是一颗有头标记与尾标记的珠子,这些标记对应着某个正整数.并且,对 ...

  6. 洛谷 P1063 能量项链

    题目描述 在Mars星球上,每个Mars人都随身佩带着一串能量项链.在项链上有N颗能量珠.能量珠是一颗有头标记与尾标记的珠子,这些标记对应着某个正整数.并且,对于相邻的两颗珠子,前一颗珠子的尾标记一定 ...

  7. [NOIP2006] 提高组 洛谷P1063 能量项链

    题目描述 在Mars星球上,每个Mars人都随身佩带着一串能量项链.在项链上有N颗能量珠.能量珠是一颗有头标记与尾标记的珠子,这些标记对应着某个正整数.并且,对于相邻的两颗珠子,前一颗珠子的尾标记一定 ...

  8. 洛谷P1063.能量项链

    题目描述 在Mars星球上,每个Mars人都随身佩带着一串能量项链.在项链上有N颗能量珠.能量珠是一颗有头标记与尾标记的珠子,这些标记对应着某个正整数.并且,对于相邻的两颗珠子,前一颗珠子的尾标记一定 ...

  9. 洛谷P1063能量项链(区间dp)

    题目描述: 给定一串序列x[],其中的每一个Xi看作看作一颗珠子,每个珠子包含两个参数,head和tail,前一颗的tail值是后一个的head值,珠子呈现环形(是一条项链),所以最后一颗的tail是 ...

随机推荐

  1. 论文笔记: Deep Learning based Recommender System: A Survey and New Perspectives

    (聊两句,突然记起来以前一个学长说的看论文要能够把论文的亮点挖掘出来,合理的进行概括23333) 传统的推荐系统方法获取的user-item关系并不能获取其中非线性以及非平凡的信息,获取非线性以及非平 ...

  2. SpringBoot整合freemarker 引用基础

    原 ElasticSearch学习笔记Ⅲ - SpringBoot整合ES 新建一个SpringBoot项目.添加es的maven坐标如下: <dependency> <groupI ...

  3. java之spring之对象的创建

    首先提供目录结构如下: 下面提供各文件代码,以供参考: UserDynamicFactory.java package cn.sxt.factory; import cn.sxt.vo.User; / ...

  4. .NET-异步操作

    感觉可以用于log日志的东西,这个东西他还是会走的但是不会影响你下一步的操作,你下一步还是正常怎么操作就怎么操作! 这样可以给用户免掉一些没必要的等待. static void Main(string ...

  5. ASP.NET SignalR 系列(一)之SignalR介绍

    一.SignalR介绍 ASP.NET SignalR 是一个面向 ASP.NET 开发人员的库,可简化将实时 web 功能添加到应用程序的过程. 实时 web 功能是让服务器代码将内容推送到连接的客 ...

  6. Java之路---Day01

    2019-10-17-19:36:43 标识符: 标识符:是指在程序中,自己定义的内容.如:类名.方法名.变量名等 命名规则(硬性要求): 1.有英文字母(区分大小写).数字.$(美元符)._(下划线 ...

  7. IDEA中调试时F8,F7快捷键失效

    idea中调试时F8,F7快捷键失效 原因:相关软件的快捷键占用了F8,F7,如我的有道词典占用F8了这个快捷键,导致idea调试时不能使用F8,改变有道词典的快捷键即可.

  8. 面试总结之Data Science

    数据科学家面试如何准备? https://mp.weixin.qq.com/s/uFJ58az8WRyaXT2nibK02g 2020 年算法 / 数据分析面试数学考点梳理 https://mp.we ...

  9. 珠宝juelrye英语juelrye宝石

    jewellery (usually uncountable, plural jewelleries) 1.(British spelling, Canadian) Collectively, per ...

  10. centos7 上Docker安装与启动

    1.  docker  centos 文档地址 https://docs.docker.com/install/linux/docker-ce/centos/ 2. 安装环境说明: docker社区版 ...