能量项链[NOIP2006提高组][Codevs 1154]
来源:互联网 发布:淘宝设计工资一般多少 编辑:程序博客网 时间:2024/05/17 06:55
题目描述 Description
在Mars星球上,每个Mars人都随身佩带着一串能量项链。在项链上有
需要时,Mars人就用吸盘夹住相邻的两颗珠子,通过聚合得到能量,直到项链上只剩下一颗珠子为止。显然,不同的聚合顺序得到的总能量是不同的,请你设计一个聚合顺序,使一串项链释放出的总能量最大。
例如:设
这一串项链可以得到最优值的一个聚合顺序所释放的总能量为
输入描述 Input Description
第一行是一个正整数
至于珠子的顺序,你可以这样确定:将项链放到桌面上,不要出现交叉,随意指定第一颗珠子,然后按顺时针方向确定其他珠子的顺序。
输出描述 Output Description
只有一行,是一个正整数
样例输入 Sample Input
4
2 3 5 10
样例输出 Sample Output
710
分析 I Think
设
代码 Code
#include <cstdio>#include <cstring>#include <algorithm>using namespace std;typedef long long LL;LL f[240][240];LL n,a[240];int main(){ scanf("%lld",&n); for(int i=1;i<=n;++i){ scanf("%lld",&a[i]); a[i+n] = a[i]; } a[0] = a[n]; for(int i=1;i<(n<<1);++i) f[i][i+1] = a[i-1]*a[i]*a[i+1]; for(int i=(n<<1);--i;) for(int j=i+2;j<=(n<<1);++j) for(int k=i;k<j;++k) f[i][j] = max(f[i][j],f[i][k]+f[k+1][j]+a[i-1]*a[k]*a[j]); LL ans = 0; for(int i=1;i<=n;++i) ans = max(ans,f[i][i+n-1]); printf("%lld",ans); return 0;}
- 能量项链[NOIP2006提高组][Codevs 1154]
- NOIP2006提高组 能量项链
- NOIP2006提高组-能量项链
- 【动态规划】NOIP2006提高组 能量项链
- NOIP2006 提高组 复赛 energy 能量项链
- codevs 1154 能量项链
- codevs 1154 能量项链
- CODEVS 1154能量项链
- CODEVS 1154 能量项链
- Codevs 1154 能量项链
- codevs 1154 能量项链
- codevs 1154 能量项链
- 【codevs 1154】能量项链
- 【NOIP2006】能量项链题解
- NOIP2006能量项链
- NOIP2006 能量项链
- NOIP2006能量项链-dp
- 【NOIP2006】能量项链
- 工作日志2016-5-6
- C++设计模式浅识命令模式
- 数据结构1——线性表链式存储 java
- eclipse 打开失败 error 13
- iOS 去掉字符串开头结尾空格
- 能量项链[NOIP2006提高组][Codevs 1154]
- 德不配位,必有灾殃(静下心听一遍)
- 多边形的代码方法
- VS.NET2010水晶报表安装部署[VS2010]
- mongodb redis memcached的对比
- ConcurrentLinkedQueue源码分析(基于JDK8,目前比较好的分析)
- win7远程Ubuntu服务器
- WinIDE5.1.8激活
- 二分法-长城守卫(Beijing Guards, CERC 2004, LA 3177)