能量项链
来源:互联网 发布:淘宝店铺会员管理 编辑:程序博客网 时间:2024/04/28 04:27
题目地址请点击——
能量项链
Description
在Mars星球上,每个Mars人都随身佩带着一串能量项链。
在项链上有
能量珠是一颗有头标记与尾标记的珠子,这些标记对应着某个正整数。
并且,对于相邻的两颗珠子,前一颗珠子的尾标记一定等于后一颗珠子的头标记。
因为只有这样,通过吸盘(吸盘是Mars人吸收能量的一种器官)的作用,这两颗珠子才能聚合成一颗珠子,同时释放出可以被吸盘吸收的能量。
如果前一颗能量珠的头标记为
需要时,Mars人就用吸盘夹住相邻的两颗珠子,通过聚合得到能量,直到项链上只剩下一颗珠子为止。显然,不同的聚合顺序得到的总能量是不同的,请你设计一个聚合顺序,使一串项链释放出的总能量最大。
例如:设
我们用记号
则第
这一串项链可以得到最优值的一个聚合顺序所释放的总能量为
Input
第一行是一个正整数
第二行是
第
至于珠子的顺序,你可以这样确定:将项链放到桌面上,不要出现交叉,随意指定第一颗珠子,然后按顺时针方向确定其他珠子的顺序。
Output
只有一行,是一个正整数
Sample Input
4
2 3 5 10
Sample Output
710
Solution
设
则
其中,
Code
#include <iostream>#include <cstdio>#define Max(x,y) ((x)>(y)?(x):(y))#define Min(x,y) ((x)<(y)?(x):(y))#define LL long longusing namespace std;LL n,ans;LL f[300];LL d[300][300];int main(){ scanf("%lld",&n); for(LL i=1;i<=n;i++){ scanf("%lld",&f[i]); f[i+n]=f[i]; } for(LL i=2*n;i>=1;i--) for(LL j=i+1;j<=Min(i+n-1,2*n);j++) for(LL k=i;k<j;k++) d[i][j]=Max(d[i][j],d[i][k]+d[k+1][j]+f[i]*f[k+1]*f[j+1]); for(LL i=1;i<=n;i++){ ans=Max(ans,d[i][i+n-1]); } printf("%lld\n",ans); return 0;}
- 能量项链
- 能量项链
- 能量项链
- 能量项链
- 能量项链
- 能量项链
- 能量项链
- 能量项链
- 能量项链
- 能量项链
- 能量项链
- 能量项链
- 能量项链
- 能量项链
- 能量项链
- TYVJ P1056 能量项链
- RQNOJ 能量项链
- tyvj-1052 能量项链
- C语言基础 分解一个四位数,得到它的千,百,十,个位
- 实现tablayout的浮动效果
- Problem E: C语言习题5.26--文件操作3
- Cannot open precompiled header file: 'Debug/***.pch': No such file or directory
- java c3p0连接池 不用spring单独使用c3p0
- 能量项链
- 动手写自己的第一个"操作系统"
- C语言基础 定义并初始化一个一维整形数组
- Problem A: 删除相同元素(线性表)
- 快捷键_整合
- codevs1022覆盖(二分图最大匹配)
- 用Git管理文件
- C++类的继承的基本认识
- 浅析C++多态及其实现模式