[原文地址](https://xiaohuang888.github.io/2019/02/25/『题解』洛谷P1063 能量项链)

Problem Portal

Portal1:Luogu

Portal2:LibreOJ

Portal3:Vijos

Description

在\(Mars\)星球上,每个\(Mars\)人都随身佩带着一串能量项链。在项链上有NN颗能量珠。能量珠是一颗有头标记与尾标记的珠子,这些标记对应着某个正整数。并且,对于相邻的两颗珠子,前一颗珠子的尾标记一定等于后一颗珠子的头标记。因为只有这样,通过吸盘(吸盘是\(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\)。

Input

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

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

Output

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

Sample Input

4
2 3 5 10

Sample Output

710

Solution

\(\text{dp[i][j]}​\)表示以\(\text{a[i]}​\)开头\(\text{a[j]}​\)结尾的能量的最大值,可以推出动态转移方程:\(dp[i][j]=\max(f[i][j], dp[i][k]+dp[k][j]+a[i] \times a[k] \times a[j])\)。

Source

#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<cmath> using namespace std; const int INF=0x7f7f7f7f, MAXN=205;
int n, a[MAXN], dp[MAXN][MAXN];
int main() {
scanf("%d",&n);
for (int i=1; i<=n; i++) {
scanf("%d",&a[i]);
a[n+i]=a[i];//复制成环
}
memset(dp, 0, sizeof(dp));
for (int len=2; len<=n; len++) {
for (int i=1; i+len-1<=(n<<1); i++) {
int j=i+len-1;
for (int k=i; k<j; k++)//枚举k
dp[i][j]=max(dp[i][j], dp[i][k]+dp[k+1][j]+a[i]*a[k+1]*a[j+1]);//动态转移方程
}
}
int Max=-INF;
for (int i=1; i<=n; i++)
if (dp[i][i+n-1]>Max) Max=dp[i][i+n-1];//寻找最大的能量值
printf("%d\n",Max);
return 0;
}

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

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

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

  2. 洛谷 P1063 能量项链 题解

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

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

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

  4. 洛谷——P1063 能量项链

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

  5. 洛谷 P1063 能量项链

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

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

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

  7. 洛谷P1063.能量项链

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

  8. 洛谷P1063能量项链题解

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

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

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

随机推荐

  1. zoj 3886 Nico Number

    中文题面: 问题描述] 我们定义一个非负整数是“好数”,当且仅当它符合以下条件之一: 1. 这个数是0或1 2. 所有小于这个数且与它互质的正整数可以排成一个等差数列 例如,8就是一个好数,因为1,3 ...

  2. cocos2d-x 系统学习cocos(2) 交互

    交互 玩游戏的时候,我们需要用输入设备和游戏进行交互,那么游戏需要对玩家做出相应,比如说按下键盘的上下左右,角色就朝着对应的方向移动,按下技能键,角色就释放技能 键盘监听 响应 cocos2d-x中要 ...

  3. EasyExcel 轻松灵活读取Excel内容

    写在前面 Java 后端程序员应该会遇到读取 Excel 信息到 DB 等相关需求,脑海中可能突然间想起 Apache POI 这个技术解决方案,但是当 Excel 的数据量非常大的时候,你也许发现, ...

  4. 使用jmeter进行压力测试入门讲解

    1.下载安装jmeter 略 我这里放上5.1版本的,有需要可以下载 链接:https://pan.baidu.com/s/1xRZZmTY4do1oDU_xPit94Q&shfl=share ...

  5. (未完)XSS漏洞实战靶场笔记

    记录下自己写的XSS靶场的write up,也是学习了常见xss漏洞类型的实战场景

  6. msf利用- windows内核提权漏洞

    windows内核提权漏洞 环境: Kali Linux(攻击机) 192.168.190.141 Windows2003SP2(靶机) 192.168.190.147 0x01寻找可利用的exp 实 ...

  7. 爬虫3:html页面+webdriver模块+demo

    保密性好的网站,不能使用request请求页面信息,这样可以使用webdriver模块先开启一个浏览器,然后爬去信息,甚至还可以click等操作对页面操作,再爬取. demo 一般流程: 1)包含se ...

  8. Python开发【第八篇】元组

    元组 元组是不可改变的序列,元组是可以存储任意类型数据的容器 元组和字符串的共同点:它们都是容器,都是不可变的序列 元组和字符串的不同点:元组可以存储任意的数据类型的元素,字符串只能存储字符 元组和列 ...

  9. 一个有趣的C语言问题

    这个问题是知乎上的一个问题,看了以后觉得比较有意思.代码短到只有十多行,但是这么短的代码却输出了很奇怪的结果.很多人回答的时候都是站在理论的角度上说明代码的问题,但是实际的问题还是没有说明其中的问题. ...

  10. HDU 1198 Farm Irrigation(状态压缩+DFS)

    题目网址:http://acm.hdu.edu.cn/showproblem.php?pid=1198 题目: Farm Irrigation Time Limit: 2000/1000 MS (Ja ...