Problem 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。

Input

有多组测试数据。

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

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

处理到文件结束。

Output

对于每组测试数据,输出只有一行,是一个正整数E(E≤2.1*109),为一个最优聚合顺序所释放的总能量。

Sample Input

4
2 3 5 10

Sample Output

710

思路:石子合并之环形合并,考虑将珠子剪开,将原有的序列变为两倍,例如:1,2,3,4 可以展成 1,2,3,4,3,2,1,用 dp[i][j] 表示合并区间 i 到 j 的最大能量,第一重循环表示珠子分组的终点,第二重循环的表示从珠子分组的起点 ,第三重循环表示截断的点

注意,有多组数据

Source Program

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<string>
#include<cstdlib>
#include<queue>
#include<set>
#include<map>
#include<stack>
#include<ctime>
#include<vector>
#define INF 0x3f3f3f3f
#define PI acos(-1.0)
#define N 201
#define MOD 10007
#define E 1e-6
#define LL long long
using namespace std;
LL a[N];
LL dp[N][N];
int main()
{int n;while(cin>>n){for(int i=1;i<=n;i++){cin>>a[i];a[i+n]=a[i];}memset(dp,0,sizeof(dp));for(int len=2;len<=n;len++){for(int i=1;i+len-1<=2*n;i++){int j=len+i-1;for(int k=i;k<j;k++)dp[i][j]=max(dp[i][j],dp[i][k]+dp[k+1][j]+a[i]*a[k+1]*a[j+1]);}}LL maxx=0;for(int i=1;i<=n;i++)maxx=max(maxx,dp[i][i+n-1]);cout<<maxx<<endl;}return 0;
}

能量项链(NOIP-2006 提高组)相关推荐

  1. 能量项链(NOIP 2006 提高组)

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

  2. P1066 2^k进制数 NOIP 2006 提高组 第四题

    洛谷蓝题(点击跳转) 提高组 第四题 题目描述 设r是个2^k 进制数,并满足以下条件: (1)r至少是个2位的2^k 进制数. (2)作为2^k 进制数,除最后一位外,r的每一位严格小于它右边相邻的 ...

  3. NOIP 2018提高组复赛C/C++试题及答案详解

    NOIP 2018提高组历年真题 CCF NOIP2018 初赛提高组 C++语言试题 第 1 页,共9 页 第二十四届全国青少年信息学奥林匹克联赛初赛 提高组 C++语言试题 竞赛时间:2018 年 ...

  4. [NOIP 2013提高组]转圈游戏 题解

    这题在洛谷上是道黄题,即[普及/提高-] 所以虽然是提高组的,但是其实挺简单的. 我们来看下题面: [NOIP 2013]转圈游戏 刚看到题面作为一个蒟蒻感觉它都不配做黄题,但是直到我看清楚了后发现它 ...

  5. NOIP 2013 提高组 货车运输

    描述 A 国有 n 座城市,编号从 1 到 n,城市之间有 m 条双向道路.每一条道路对车辆都有重量限制,简称限重.现在有 q 辆货车在运输货物,司机们想知道每辆车在不超过车辆限重的情况下,最多能运多 ...

  6. NOIP 2008 提高组 复赛 message 传字条

    NOIP 2008 提高组 复赛 message 传字条 1.样例很快模拟成功,但感觉是凑出来的,没有章法. 2.深度优先遍历,但感觉容易超时. 3.动态规划?翻看他人代码,发现动态规划的写法,确实想 ...

  7. NOIP 2015 提高组 初赛

    NOIP 2015 提高组 初赛 疑难点 学习 感悟. 一. 3. 示例如下(来自自个的理解): 101.101 十进制 转十进制1*10^2+0*10^1+1*10^0+1*10^-1+0*10^- ...

  8. NOIP 2017 提高组 初赛

    NOIP 2017 提高组 初赛 做题感悟. 五.完善程序,是本张试卷最简单的题目,两道题做完,大约花了10分钟.2017-10-17 18:25 对了答案,破天荒,全对. 1.(大整数除法) 有如下 ...

  9. NOIP 2016 提高组 初赛

    NOIP 2016 提高组 初赛 疑难点 学习 感悟. 一. 2.该题81容易看成81次按键,实际是屏幕上出现的第81个字符,实际按键次数超过81次. 3.异或,相同位上,数字相同取0,数字不同取1, ...

最新文章

  1. 大话:边缘计算、雾计算、云计算
  2. 我对北京印象之10年前后
  3. python基础1 第一天
  4. nslookup 包含在那个包中_nslookup命令详解
  5. Python3 字典 items() 方法
  6. 信息安全隐忧是快递实名的“死穴”
  7. 变成“砖”?旧款 Kindle 因 3G 消失将无法联网
  8. 算数编码java_算术编码核心类
  9. 系统学习深度学习(二) --自编码器,DA算法,SDA,稀疏自编码器
  10. C#关键字=四六级核心词汇
  11. Code For Better 谷歌开发者之声——谷歌Web工具包(GWT)
  12. nas服务器加密文件夹,NAS加密文件夹创建和使用教程
  13. DescendingOrder
  14. 计算机控制技术俞光昀练习答案,计算机控制技术 复习重点 ( 俞光昀)
  15. 基于VC面部识别软件(识别出人脸特征)
  16. 学习pandas全套代码【超详细】数据查看、输入输出、选取、集成、清洗、转换、重塑、数学和统计方法、排序
  17. 《C++新经典Linux C++通信架构实战》第1章 课程介绍
  18. bzoj4407 于神之怒加强版(莫比乌斯反演+线性筛)
  19. navicat持续试用
  20. 微信小程序微信公众号支付宝小程序H5(获取信息用户信息,支付,分享,人脸识别)

热门文章

  1. 鸿蒙霸榜 GitHub,从最初的 Plan B 到“取代 Android”?
  2. windows虚拟机_iOS 版虚拟机:在 iPhone 上运行 Windows 系统
  3. ffmpeg转码_音视频处理神器FFmpeg
  4. 送分题,ArrayList 的扩容机制了解吗?
  5. 一口气说出 6种 延时队列的实现方法,面试官也得服
  6. 如果每天进步1%,明年的今天你会怎样
  7. 浪费超9000亿美金,数字化转型失败罪魁祸首在DevOps?
  8. 华为程序员写代码十几年没有被拿去“祭天”,靠的是这5条口诀
  9. 微信小程序,引爆新热点!JEECG社区小程序实战培训,业内首发,实战干货!
  10. 架构设计 | 分布式体系下,服务分层监控策略