题目描述:

给定一串序列x[],其中的每一个Xi看作看作一颗珠子,每个珠子包含两个参数,head和tail,前一颗的tail值是后一个的head值,珠子呈现环形(是一条项链),所以最后一颗的tail是第一个珠子的head.当tail遇到对应的head时会放出

Xi.head*Xi.tail*X++i.head,之后这两颗相邻的珠子会变成新的一颗Xp,它的参数为Xp.head=Xi.head,Xp.tail=X++i.tail,问整条项链合并到只剩下一颗时所能产生的最大能量.

题目链接:P1063

至于珠子的顺序,你可以这样确定:将项链放到桌面上,不要出现交叉,随意指定第一颗珠子,然后按顺时针方向确定其他珠子的顺序。

输出格式

一个正整数E(E≤2.1×(10)9)E(E≤2.1 \times (10)^9)E(E≤2.1×(10)9),为一个最优聚合顺序所释放的总能量。

in:

4
2 3 5 10

out:

710

思路:区间dp,以小区间来作为最优子结构来计算大区间,整个题目的解法等价于找1~E中从哪一个最开始先合并,我们以dp[i][j]表示合并区间i到j的最优解,在i到j中选取k开始合并的状态转移方程为:dp[i][j]=max(dp[i][j],dp[i][k]+dp[k+1][j]+a[i].h*a[j].t*a[i+k].t)

那么算法大体就定下来了O(n^3)的思路

#include <bits/stdc++.h>
using namespace std;
struct node//存珠子
{
int h;
int t;
} e[];
int n;
int dp[][];
int total;
int main()
{
cin>>n;
for(int i=; i<n; i++)
{
int x;
cin>>x;
if(i==)
{
int y;
cin>>y;
e[i].h=x;
e[i].t=y;
continue;
}
e[i].h=e[i-].t;
e[i].t=x;
if(i==n-)
{
e[n].h=e[n-].t;
e[n].t=e[].h;
}
}//输入,第一个和最后一个做了特判
for(int i=; i<n; i++)
e[i+n]=e[i];//这一步很关键,相当于拆环,把整段序列在往尾部接上一次,以达到环形
for(int i=; i<=n; i++)
for(int j=; j<*n-i; j++)
for(int k=j; k<i+j; k++)
dp[j][j+i]=max(dp[j][j+i],dp[j][k]+dp[k+][j+i]+e[j].h*e[k].t*e[i+j].t);
for(int i=;i<=n;i++)
total=max(total,dp[i][i+n-]);
cout<<total; return ;
}

洛谷P1063能量项链(区间dp)的更多相关文章

  1. 洛谷 - P1063 - 能量项链 - 区间dp

    https://www.luogu.org/problemnew/show/P1063 这个并不是每次只能从两边扩展的,可以从中间断开. #include<bits/stdc++.h> u ...

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

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

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

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

  4. 洛谷——P1063 能量项链

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

  5. 洛谷 P1063 能量项链 题解

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

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

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

  7. 洛谷 P1063 能量项链(区间DP)

    嗯... 题目链接:https://www.luogu.com.cn/problem/P1063 这道题首先要读懂题目,然后往上套区间dp,要转换成链式. AC代码: #include<cstd ...

  8. 洛谷P1063能量项链题解

    $题目$ 不得不说,最近我特别爱刷这种区间DP题,因为这个跟其他的DP有些不一样的地方,主要是有一定的套路,就是通过小区间的状态更新大区间,从而得到原题给定区间的最优解. $但是$ 这个题应该跟$石子 ...

  9. P1063 能量项链 区间dp

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

随机推荐

  1. RSYNC 同步工具

    Rsync 数据同步工具 一.Rsync简介 1.检测一下你的机器上是否已经安装  --->可以通过yum安装  或者  源码 Server  192.168.201.151 Client    ...

  2. centos7 手动设置时间

    date -s "2020-02-03 23:13:00" hwclock -w clock -w

  3. MQTT协议的学习

    MQTT是一个客户端服务端架构的发布/订阅模式的消息传输协议.它的设计思想是轻巧.开放.简单.规范,易于实现.这些特点使得它对很多场景来说都是很好的选择,特别是对于受限的环境如机器与机器的通信(M2M ...

  4. java配置文件集

    <!-- 激活组件扫描功能,扫描aop的相关组件组件 --> <context:component-scan base-package="com.yingjun.ssm.a ...

  5. 【C/C++】概念: VC虚函数布局引发的问题

    在网上看到一个非常热的帖子,里面是这样的一个问题: 在打印的时候发现pFun的地址和 &(Base::f)的地址竟然不一样太奇怪了?经过一番深入研究,终于把这个问题弄明白了.下面就来一步步进行 ...

  6. python学习--curl

    PyCurl是一个C语言写的libcurl的python绑定库.libcurl 是一个自由的,并且容易使用的用在客户端的 URL 传输库.它的功能很强大,PycURL 是一个非常快速(参考多并发操作) ...

  7. HDU_1394_线段树

    http://acm.hdu.edu.cn/showproblem.php?pid=1394 线段树入门题,每次读入一个数,就寻找在树中比它大的值的个数,然后更新树,把个数相加就是逆序数,每移动一个数 ...

  8. 51nod 1133 不重叠的线段 (贪心,序列上的区间问题)

    题意: 最多能选几条不重叠的线段 思路: 按R从小到大排序,维护一个最大的右端点 右端点最小的那个线段是必选的,可以贪心地证明 代码: #include<iostream> #includ ...

  9. Jenkins: QQ/Wechat机器人群消息通知Job构建结果

    简介 Jenkins是持续化集成的一个核心部件,它上游从仓库(gitlab)等拉取代码,经编译构建,将应用发布至下游目标环境:构建结果通知的方式有很多,现成的插件有邮件和钉钉方式,但是就方便的角度,通 ...

  10. 基于 Serverless Component 全栈解决方案 Ⅱ

    虽然之前的文章 基于 Serverless Component 的全栈解决方案 介绍了如何借助 Serverless Component 快速搭建 Restful API 后端服务 和 Vue.js ...