【区间动规】【记忆化搜索】能量项链
题目:能量项链 rqnoj5
题目描述
在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。
输入格式
输入文件的第一行是一个正整数N(4≤N≤100),表示项链上珠子的个数。第二行是N个用空格隔开的正整数,所有的数均不超过1000。第i个数为第i颗珠子的头标记(1≤i≤N),当1≤i<N时,第i颗珠子的尾标记应该等于第i+1颗珠子的头标记。第N颗珠子的尾标记应该等于第1颗珠子的头标记。
至于珠子的顺序,你可以这样确定:将项链放到桌面上,不要出现交叉,随意指定第一颗珠子,然后按顺时针方向确定其他珠子的顺序。
输出格式
输出文件只有一行,是一个正整数E(E≤2.1*10^9),为一个最优聚合顺序所释放的总能量。
样例输入
4 2 3 5 10
样例输出
710
这一题跟石子合并那一题很像http://www.cnblogs.com/oijzh/archive/2012/08/19/2646578.html,所以思路就不说了,这里给出C++ Code
#include<cstdio>
#define MAXN 110int n,a[MAXN*2],f[MAXN*2][MAXN*2];int getsum(int l,int r)
{if(r-l+1<2)return 0;if(r-l+1==2) return (a[l]*a[r]*a[r+1]);if(f[l][r]!=0)return f[l][r];for(int j=l+1;j<=r;j++)f[l][r]>?=getsum(l,j-1)+getsum(j,r)+a[l]*a[j]*a[r+1];//区间 l..........(j-1).j..................rreturn f[l][r]; //分成 |<------------->|<------------------>|
} //新区间为 l..(j-1) j..r//即 (l,l+1)..(j-1,j) 和 (j,j+1)..(r,r+1) 注意最后是r+1 !!
int main()
{freopen("energy.in","r",stdin);freopen("energy.out","w",stdout);scanf("%d",&n);for(int i=1;i<=n;i++){scanf("%d",&a[i]);a[i+n]=a[i];}int best=0;for(int i=1;i<=n;i++)best>?=getsum(i,i+n-1);printf("%d",best);
}
转载于:https://www.cnblogs.com/oijzh/archive/2012/08/19/2646581.html
【区间动规】【记忆化搜索】能量项链相关推荐
- 「BZOJ1055」[HAOI2008] 玩具取名 - 区间动规 - 记忆化搜索
->戳我进原题 [HAOI2008]玩具取名 Time Limit: 10 Sec Memory Limit: 162 MB Submit: 2486 Solved: 1448 Descript ...
- c++ 记忆化搜索_2010/12区间动态规划及记忆化搜索
相关发表文章:2012/12由怎样画马谈培养动漫课程教师的专业素养2012/0708通达网络中可信的n%谈网络批判性思维的养成2011/1516信息学奥赛大家谈2008/02解读高中信息技术教学理念中 ...
- 蓝桥杯 乘积最大(区间dp+记忆化搜索)
问题描述 今年是国际数学联盟确定的"2000--世界数学年",又恰逢我国著名数学家华罗庚先生诞辰90周年.在华罗庚先生的家乡江苏金坛,组织了一场别开生面的数学智力竞赛的活动,你的一 ...
- Palindrome subsequence HDU - 4632 区间dp|记忆化搜索
// 区间dp import java.util.Scanner;/**** @author CN*/ public class main {static int mod = 10007;static ...
- Codeforces 1293 E. Xenon‘s Attack on the Gangs —— 树上记忆化搜索,单点加改成区间加,有丶东西
This way 题意: 现在有一棵大小为n的树,你要往边上放0~n-2这n-1个数,定义mex(u,v)表示u到v路径上的第一个未出现的自然数,定义S 问你S最大是多少. 题解: 我感觉这道题绝不止 ...
- 动态规划:记忆化搜索
记忆化搜索和递推都是为了解决子问题重复计算而产生的 虽然动态规划的转移图是一个DAG,但是一个状态可以被其他的状态复用多次 因此为了提高动态规划的效率,记忆化搜索便产生了 但是有时候,状态转移图是不容 ...
- NYOJ 304 节能【记忆化搜索】
节能 时间限制:1000 ms | 内存限制:65535 KB 难度:5 描述 Dr.Kong设计的机器人卡多越来越聪明.最近市政公司交给卡多一项任务,每天早晨5:00开始,它负责关掉ZK大道右侧 ...
- 收集宝石 [记忆化搜索]
收集宝石 [记忆化搜索] 问题描述 何老板最近在玩一款收集宝石的手游.游戏虽然简单,但他仍然乐此不疲. 游戏中,有30001个小岛排成一条直线,小岛从左往右编号0到30000,相邻岛屿间距为1. 有n ...
- 动态规划入门——记忆化搜索
文章目录 记忆化搜索 1.数塔问题 2.滑雪 总结 记忆化搜索 1.数塔问题 [动规:递归求解] 递推方程: 不难发现,最后一层的点到最后一层的最大距离即为自己对应的值a[n - 1][y],这个就是 ...
- [P1434 [SHOI2002]滑雪](DFS,记忆化搜索)
P1434 [SHOI2002]滑雪 题目描述 Michael喜欢滑雪.这并不奇怪,因为滑雪的确很刺激.可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你 ...
最新文章
- Caffe + windows + python3.5安装
- 图解Sqlite教程2
- Java对象克隆方法(浅克隆、深克隆)
- epoll nio区别_【总结】两种 NIO 实现:Selector 与 Epoll
- mysql 检查列是否存在,如何检查mysql表列是否存在?
- Eclipse卸载插件SpringSoource-tool-suite
- 15.MongoDB的一致性(读关注与写关注)
- HDU 4417 划分树写法
- go语言中金币分配训练--pm
- html导出excel设置宽度,导出excel图片如何把大小控制
- Zipkin jar 下载地址
- 【Unity】制作简单的启动、菜单和游戏界面
- 关于使用https请求微信乱码问题
- UG NX 12 同步建模技术
- 最好的开源App锦集
- 大漠找图算法_大漠找图怎么实现用资源表图片找的?(不用写出的方法)
- 【Chapter 3: Process】
- JAVA微信登陆详解
- 电脑默认按住了ctrl键的解决办法
- ffmpeg对mpeg2-TS解析的最详细分析 ffmpeg