能量项链(NOIP-2006 提高组)
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 10Sample 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 提高组)相关推荐
- 能量项链(NOIP 2006 提高组)
题目描述 Description 在Mars星球上,每个Mars人都随身佩带着一串能量项链.在项链上有N颗能量珠.能量珠是一颗有头标记与尾标记的珠子,这些标记对应着某个正整数.并且,对于相邻的两颗珠子 ...
- P1066 2^k进制数 NOIP 2006 提高组 第四题
洛谷蓝题(点击跳转) 提高组 第四题 题目描述 设r是个2^k 进制数,并满足以下条件: (1)r至少是个2位的2^k 进制数. (2)作为2^k 进制数,除最后一位外,r的每一位严格小于它右边相邻的 ...
- NOIP 2018提高组复赛C/C++试题及答案详解
NOIP 2018提高组历年真题 CCF NOIP2018 初赛提高组 C++语言试题 第 1 页,共9 页 第二十四届全国青少年信息学奥林匹克联赛初赛 提高组 C++语言试题 竞赛时间:2018 年 ...
- [NOIP 2013提高组]转圈游戏 题解
这题在洛谷上是道黄题,即[普及/提高-] 所以虽然是提高组的,但是其实挺简单的. 我们来看下题面: [NOIP 2013]转圈游戏 刚看到题面作为一个蒟蒻感觉它都不配做黄题,但是直到我看清楚了后发现它 ...
- NOIP 2013 提高组 货车运输
描述 A 国有 n 座城市,编号从 1 到 n,城市之间有 m 条双向道路.每一条道路对车辆都有重量限制,简称限重.现在有 q 辆货车在运输货物,司机们想知道每辆车在不超过车辆限重的情况下,最多能运多 ...
- NOIP 2008 提高组 复赛 message 传字条
NOIP 2008 提高组 复赛 message 传字条 1.样例很快模拟成功,但感觉是凑出来的,没有章法. 2.深度优先遍历,但感觉容易超时. 3.动态规划?翻看他人代码,发现动态规划的写法,确实想 ...
- NOIP 2015 提高组 初赛
NOIP 2015 提高组 初赛 疑难点 学习 感悟. 一. 3. 示例如下(来自自个的理解): 101.101 十进制 转十进制1*10^2+0*10^1+1*10^0+1*10^-1+0*10^- ...
- NOIP 2017 提高组 初赛
NOIP 2017 提高组 初赛 做题感悟. 五.完善程序,是本张试卷最简单的题目,两道题做完,大约花了10分钟.2017-10-17 18:25 对了答案,破天荒,全对. 1.(大整数除法) 有如下 ...
- NOIP 2016 提高组 初赛
NOIP 2016 提高组 初赛 疑难点 学习 感悟. 一. 2.该题81容易看成81次按键,实际是屏幕上出现的第81个字符,实际按键次数超过81次. 3.异或,相同位上,数字相同取0,数字不同取1, ...
最新文章
- 大话:边缘计算、雾计算、云计算
- 我对北京印象之10年前后
- python基础1 第一天
- nslookup 包含在那个包中_nslookup命令详解
- Python3 字典 items() 方法
- 信息安全隐忧是快递实名的“死穴”
- 变成“砖”?旧款 Kindle 因 3G 消失将无法联网
- 算数编码java_算术编码核心类
- 系统学习深度学习(二) --自编码器,DA算法,SDA,稀疏自编码器
- C#关键字=四六级核心词汇
- Code For Better 谷歌开发者之声——谷歌Web工具包(GWT)
- nas服务器加密文件夹,NAS加密文件夹创建和使用教程
- DescendingOrder
- 计算机控制技术俞光昀练习答案,计算机控制技术 复习重点 ( 俞光昀)
- 基于VC面部识别软件(识别出人脸特征)
- 学习pandas全套代码【超详细】数据查看、输入输出、选取、集成、清洗、转换、重塑、数学和统计方法、排序
- 《C++新经典Linux C++通信架构实战》第1章 课程介绍
- bzoj4407 于神之怒加强版(莫比乌斯反演+线性筛)
- navicat持续试用
- 微信小程序微信公众号支付宝小程序H5(获取信息用户信息,支付,分享,人脸识别)
热门文章
- 鸿蒙霸榜 GitHub,从最初的 Plan B 到“取代 Android”?
- windows虚拟机_iOS 版虚拟机:在 iPhone 上运行 Windows 系统
- ffmpeg转码_音视频处理神器FFmpeg
- 送分题,ArrayList 的扩容机制了解吗?
- 一口气说出 6种 延时队列的实现方法,面试官也得服
- 如果每天进步1%,明年的今天你会怎样
- 浪费超9000亿美金,数字化转型失败罪魁祸首在DevOps?
- 华为程序员写代码十几年没有被拿去“祭天”,靠的是这5条口诀
- 微信小程序,引爆新热点!JEECG社区小程序实战培训,业内首发,实战干货!
- 架构设计 | 分布式体系下,服务分层监控策略