传送

这又是一道经典的区间DP题。

复习一下区间DP的做法。

三重循环,第一层枚举区间长度,第二层枚举起点,第三层枚举断点。

区间长度是从1到n-1(因为如果是从1到n的话,1+n≠n,所以是1到n-1)。注意这里的n就是总的元素个数(一般就是题目中给出的n,而不是处理完环变链之后的总数(2*n-1))

但是在枚举起点的时候要特别注意,要使这次枚举起点的最大值+当前枚举的区间长度=链的最后一个元素的编号。

举个栗例子:在这道题里,我们这样枚举:

for(int len=;len<=n;len++)//一开始我设的是end=st+len-1,不过等价于上面所说的len从1到n-1,end=st+len
for(int st=;st<=2*n-len+1;st++)//注意枚举的终止条件

感性理解一下ρωρ

枚举断点的时候,断点k是从st枚举到end-1(如果枚举到end,则k+1=end+1,f[end+1][end]没有实际意义)

通用的做法讲完了,来扯一下这道题

用h[i],表示i号点的头标记(head),用t[i]表示i节点的尾标记(tail),f[i][j]表示从第i个点合并到第j个点的最大得分,初始化:f[i][i]=0(因为你不需要合并,当然也没有得分)

从读入开始,就是坑。因为我们要在读入头标记的时候计算尾标记,h[i]=t[i-1]。我们注意到,点的编号从1开始,1-1是0,但是不存在0号点,所以要特判掉。并且这里还牵扯到环变链,所以也要计算h[i+n],t[i+n]。

读入完了,我们发现接下来就是一个标准的区间DP板子,只需要注意上面所提到的枚举的起止点就可以了。

递推式:f[i][j]=max(f[i][j],f[i][k]+f[k+1][j]+h[i]*t[k]*t[j])

最后答案注意不是f[1][n],而是在f[i][i+n-1](1<=i<=n)中选择最大值(不一定要从1节点开始合并)

代码:

#include<bits/stdc++.h>
using namespace std;
const int N=;
int n,h[N*],t[N*],f[N*][N*];
int read()//快读
{
char ch=getchar();
int x=;bool f=;
while(ch<''||ch>'')
{
if(ch=='-')f=;
ch=getchar();
}
while(ch>=''&&ch<='')
{
x=(x<<)+(x<<)+(ch^);
ch=getchar();
}
f?x=-x:x=x;
return x;
}
int main()
{
n=read();
for(int i=;i<=n;i++)
{
h[i]=read();
int r=i-;if(r==)r=n;//pay attention
t[r]=h[i];
h[i+n]=h[i];
t[r+n]=t[r];
}
for(int len=;len<=n;len++)//len=r-l+1
{
for(int st=;st<=*n-len+;st++)//注意一下
{
int end=st+len-;
for(int k=st;k<end;k++)
{
f[st][end]=max(f[st][end],f[st][k]+f[k+][end]+h[st]*t[k]*t[end]);
}
}
}
int maxn=-;
for(int i=;i<=n;i++)
maxn=max(maxn,f[i][i+n-]);//找答案
printf("%d",maxn);
}

P1063能量项链的更多相关文章

  1. 【洛谷】P1063 能量项链【区间DP】

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

  2. 洛谷——P1063 能量项链

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

  3. 『题解』洛谷P1063 能量项链

    原文地址 Problem Portal Portal1:Luogu Portal2:LibreOJ Portal3:Vijos Description 在\(Mars\)星球上,每个\(Mars\)人 ...

  4. 洛谷 P1063 能量项链 题解

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

  5. 区间DP小结 及例题分析:P1880 [NOI1995]石子合并,P1063 能量项链

    区间类动态规划 一.基本概念 区间类动态规划是线性动态规划的拓展,它在分阶段划分问题时,与阶段中元素出现的顺序和由前一阶段的那些元素合并而来由很大的关系.例如状态f [ i ][ j ],它表示以已合 ...

  6. luogu P1063 能量项链 x

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

  7. 洛谷P1063 能量项链 [2006NOIP提高组]

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

  8. 洛谷 P1063 能量项链

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

  9. P1063 能量项链 区间dp

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

  10. 洛谷P1063 能量项链(区间DP)(环形DP)

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

随机推荐

  1. [19/05/04-星期六] 正则表示式(Regular Expression)

    一.概念 语法: \D :就是不是0-9数字的其它字符: \W:与\w相反: a\d?b:表示在字符a和b之间可以有一个数字或者没有数字都可以:如:ab .a3b a\d+b:表示在字符a和b之间至少 ...

  2. <每日一题> Day6:HDU递推专题完结

    原题链接 这是我自己Clone的专题,A,B题解昨天发过了 C:参考代码: /* 很容易我们可以手推出n = 1, 2, 3时的情况,我们假设前n - 1 列已经放好,方法有dp[n - 1]种,第n ...

  3. ajax传文件用express的multer接住

    html部分: //input type设为file <input type="file" name="file" id="fileInputE ...

  4. CSS浏览器兼容性

    答题技巧:因为这个问题主要是看你经验,一般有了开发经验的都会遇到这样的坑,你只要说出几个来大致就可以了. 1.对齐文本和文本输入框 问题: 当input元素在设置了高时,在IE7.IE8.IE9下会出 ...

  5. 使用Kafka的一些简单介绍: 1集群 2原理 3 术语

    目录 第一节 Kafka 集群 Kafka 集群搭建 Kafka 集群快速搭建 第二节 集群管理工具 集群管理工具 集群 Issues 第三节 使用命令操纵集群 第四节 Kafka 术语说明 第五节 ...

  6. 13、前端知识点--ajax原理以及实现过程

    一.简略版的 Ajax简介 Ajax(Asyncchronous JavaScript and Xml),翻译过来就是说:异步的javaScript和xml, Ajax不是新的编程语言,而是一种使用现 ...

  7. Ubuntu Anaconda3 环境下安装caffe

    安装Python环境 本人环境为Anaconda3 ,可参照 https://blog.csdn.net/ctwy291314/article/details/86571198 完成安装Python2 ...

  8. Conference - open source drives IOT from device to edge

    Open source drives IOT from device to edge 以下都是针对IOT领域的项目: ACRN A Big Little Hypervisor for IoT Deve ...

  9. python常用函数 W

    with…as with 语句适用于对资源进行访问的场合,确保不管使用过程中是否发生异常都会执行必要的“清理”操作,释放资源,比如文件使用后自动关闭.线程中锁的自动获取和释放等.当python执行wi ...

  10. python常用函数 V

    vars(object) 返回对象object的属性和属性值的字典对象.不输入参数,就打印当前调用位置的属性和属性值,相当于locals()的功能. 例子: