说好的好好写人话的题解

嗯很多题解都说过这是一个石子合并的模型它也确实就是一个石子合并的模型。然而就算这样我也不会写最后仍然写了个记忆化搜索

首先我们不论环状,就直接一条链型,当只剩下两个珠子的时候,合并的顺序肯定是唯一的,当三个珠子的时候,可能是{{1,2}3}这样的合并,也有可能是{{1}2,3}这样的合并,那么我们就是枚举在区间之中的一颗珠子,以它为断点,分别递归左右两边。【比如lf和rt是边界,i是断点,那么就是搜索lf-i,i+1-rt】,最后记得要加上左右两边珠子聚合的能量(lf的头标记*i+1的头标记*rt的尾标记)。边界条件就是当只剩下两颗珠子的时候。

链型的问题就解决啦!然而这道题是环形的

环形的拆成链型不就好了!

这里拆成链型有两种方法,一是枚举断开的位置分别DP打擂,另一种是复制一遍序列枚举开始点DP打擂。然而我觉得并没有什么区别

我用的是第二种方法,不知道第一种方法会不会TLE。

下附代码然而其实还是没有好好说话

 #include <algorithm>
#include <iostream>
#include <fstream>
#include <cstdlib>
#include <cstring>
#include <cmath>
using namespace std;
ifstream fin("energy.in");
ofstream fout("energy.out");
int lenght=,DG[][]={};
int li[][]={};//0头1尾
int DP(int lf,int rt);
int main(void)
{
fin>>lenght;
for(int i=;i<=lenght;i++)
{
fin>>li[i][];
if(i!=)li[i-][]=li[i][];
}
li[lenght][]=li[][];
for(int i=lenght+;i<=lenght*-;i++)
{
li[i][]=li[i-lenght][];
li[i][]=li[i-lenght][];
}
int ans=,t=;
for(int i=;i<=lenght;i++)
{
t=DP(i,i+lenght-);
ans=max(t,ans);
}
fout<<ans;
return ;
} int DP(int lf,int rt)
{
if(DG[lf][rt]!=)return DG[lf][rt];
if(rt==lf+)return li[rt][]*li[rt][]*li[lf][];
int tot=,as=;
for(int i=lf;i<rt;i++)
{
tot=DP(lf,i)+DP(i+,rt)+(li[lf][]*li[i+][]*li[rt][]);
as=max(tot,as);
}
DG[lf][rt]=as;
return as;
}

【NOIP2006提高组】能量项链的更多相关文章

  1. [NOIP2006] 提高组 洛谷P1063 能量项链

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

  2. noip2006提高组题解

    第一题:能量项链 区间型动态规划 据说这题在当年坑了很多人. f(i, j) 表示从第i个珠子开始合并j个珠子所释放的最大能量. f(i, j) = max{ f(i, k} + f(i+k, j-k ...

  3. [NOIP2006] 提高组 洛谷P1066 2^k进制数

    题目描述 设r是个2^k 进制数,并满足以下条件: (1)r至少是个2位的2^k 进制数. (2)作为2^k 进制数,除最后一位外,r的每一位严格小于它右边相邻的那一位. (3)将r转换为2进制数q后 ...

  4. [NOIP2006] 提高组 洛谷P1064 金明的预算方案

    题目描述 金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间金明自己专用的很宽敞的房间.更让他高兴的是,妈妈昨天对他说:“你的房间需要购买哪些物品,怎么布置,你说了算,只要不超过N元钱就行”.今 ...

  5. [NOIP2006] 提高组 洛谷P1065 作业调度方案

    题目描述 我们现在要利用m台机器加工n个工件,每个工件都有m道工序,每道工序都在不同的指定的机器上完成.每个工件的每道工序都有指定的加工时间. 每个工件的每个工序称为一个操作,我们用记号j-k表示一个 ...

  6. 【动态规划】Vijos P1313 金明的预算方案(NOIP2006提高组第二题)

    题目链接: https://vijos.org/p/1313 题目大意: m(m<=32000)金钱,n(n<=60)个物品,花费vi,价值vi*ci,每个物品可能有不超过2个附件,附件没 ...

  7. [洛谷] P1065 [NOIP2006 提高组] 作业调度方案

    点击查看代码 #include<bits/stdc++.h> using namespace std; const int N = 1e6 + 10; int m, n, ans = 0; ...

  8. TYVJ P1056 能量项链 Label:环状区间DP

    做题记录:2016-08-16 20:05:27 背景 NOIP2006 提高组 第一道 描述     在Mars星球上,每个Mars人都随身佩带着一串能量项链.在项链上有N颗能量珠.能量珠是一颗有头 ...

  9. tyvj 1056 能量项链 区间dp (很神)

    P1056 能量项链 时间: 1000ms / 空间: 131072KiB / Java类名: Main 背景 NOIP2006 提高组 第一道 描述     在Mars星球上,每个Mars人都随身佩 ...

随机推荐

  1. [原]逆向iOS SDK -- +[UIImage imageNamed:] 的实现

    汇编代码: ; Dump of assembler code for function +[UIImage imageNamed:] ; R0 = UIImage, R1 = "imageN ...

  2. Linux环境进程间通信(五): 共享内存(上)

    linux下进程间通信的几种主要手段: 管道(Pipe)及有名管道(named pipe):管道可用于具有亲缘关系进程间的通信,有名管道克服了管道没有名字的限制,因此,除具有管道所具有的功能外,它还允 ...

  3. LigerUI权限系统之菜单管理

    菜单管理跟上篇的组织结构实现方式差不多,所以不存在多大的问题.还是老样,先上图,再看代码.菜单管理界面 菜单管理添加: 菜单管理修改: 前端完整代码: @section headerScripts{ ...

  4. Socket的粘包处理

    Socket的粘包处理 当socket接收到数据后,会根据buffer的大小一点一点的接收数据,比如: 对方发来了1M的数据量过来,但是,本地的buffer只有1024字节,那就代表socket需要重 ...

  5. 【C++自我精讲】基础系列四 static

    [C++自我精讲]基础系列四 static 0 前言 变量的存储类型:存储类型按变量的生存期划分,分动态存储方式和静态存储方式. 1)动态存储方式的变量,生存期为变量所在的作用域.即程序运行到此变量时 ...

  6. Google安全团队对Android安全的认识

    http://commondatastorage.googleapis.com/io2012/presentations/live%20to%20website/107.pdf 看看google的攻城 ...

  7. Python爬虫小白入门(六)爬取披头士乐队历年专辑封面-网易云音乐

    一.前言 前文说过我的设计师小伙伴的设计需求,他想做一个披头士乐队历年专辑的瀑布图. 通过搜索,发现网易云音乐上有比较全的历年专辑信息加配图,图片质量还可以,虽然有大有小. 我的例子怎么都是爬取图片? ...

  8. JDK1.8源码阅读系列之一:ArrayList

    本篇随笔主要描述的是我阅读 ArrayList 源码期间的对于 ArrayList 的一些实现上的个人理解,有不对的地方,请指出- 先来看一下 ArrayList 的继承图: 由图可以看出,Array ...

  9. xhtml头文件设置

    设置字符集编码: <head> <meta http-equiv="Content-Type" Content="text/html" cha ...

  10. 前端MVC学习笔记(四)——NodeJS+MongoDB+AngularJS+Bootstrap书店示例

    这章的目的是为了把前面所学习的内容整合一下,这个示例完成一个简单图书管理模块,因为中间需要使用到Bootstrap这里先介绍Bootstrap. 示例名称:天狗书店 功能:完成前后端分离的图书管理功能 ...