中文题。。题意略

我们知道每次枚举最后合并哪两个。。

于是枚举中间节点k

我犯的错误是将转移方程写成了,dp[l][r]=max(dp[l][r],dp[l][k]+dp[k+1][r]+a[l]*a[k+1]*a[k+2])

然而我们知道,dp[l][k]的头和尾是(l,k+1),dp[k+1][r]的头和尾是(k+1,r+1)

我居然没分析出这一点。。困惑于如果[1,4]分成的一个子区间[2,3],dp[2][3]=dp[2][2]+dp[3][3]+a[2]*a[3]*?

这里看成最后一次合并。。你是a[2]*a[3]*a[2]呢,还是a[2]*a[3]*a[3]*a[3+1]=(由题意)a[2]*a[3]*a[3+1],如果我们按照题意头尾分析

我在纠结把2,3看成递归地最后一次合并应该怎么看待,如果按我的理解一开始按位置来最后俩合并的是2,3那么这俩相邻。。所以一定是互相乘

但是实际上根本不存在2,3最后一次合并。。

那么问题就变成了最后剩下两个就一定该互相乘吗?按照题意来说不是的

比如说1,2,3,4,5,1,2,3,4,5

如果按照整个区间来算比如 (3,4,5) (1,2)则这个算法总是有效

但是

(2,3,4)

(2,2) (3,4)

显然在小区间。。我们任何时候都应该考虑往右扩展,此时a[2]*a[3]*a[2]是不对的。。因为(3,4)这一部分合并完后缀一定是5

那么会不会有一种情况导致5这个珠子已经没了呢。。不会的。。因为我们在划分的时候,你看一下上面的序列就明白

要么1,5被隔开。。要么按5,1的顺序连在一起。。合并完前缀不还是5..所以这种情况后缀一定存在。。不必担心。。

所以给我们的启示是。。按照题目的规则合并。。因为我们在小子区间的臆想不符合题意。。要按照头尾标号进行合并计算

然后处理环形我们都开大一倍空间。。然后我们取i,i+(n-1)区间中最大的情况就好了,

但是N<=100,我才开了105,多开一倍空间的话就是201!奇葩OJ给我报了WA而不是RE,真是NB。。以后一定要小心环忘记开大数组而WA

然而后来我注意到一个显然的事实。。在小区间里发生的一定不是整个区间的最后一次合并。。并且合并计算的条件不是递归的。。而是整体静态的

贴18ms的代码。。

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring> using namespace std; int n;
int a[255];
int dp[255][255];
int dfs(int l,int r,int dep){
// printf("DFS (%d,%d) DEP%d\n",l,r,dep);
if(dp[l][r]!=-1) return dp[l][r];
if(l>=r) return dp[l][r]=0;
int k,p=0;
for(k=l;k<r;++k){
p=max(p,a[l]*a[k+1]*a[r+1]+dfs(l,k,dep+1)+dfs(k+1,r,dep+1));//合并到r,则r的右端是r+1,而不是k+2
}
p=max(p,a[l]*a[r]*a[r+1]+dfs(l,r-1,dep+1));
// printf("DFS (%d,%d) DEP%d ANS%d\n",l,r,dep,p);
return dp[l][r]=p;
} int main(){
scanf("%d",&n);
int i;
for(i=1;i<=n;++i){
scanf("%d",a+i);
}
for(i=n+1;i<=2*n;++i){
a[i]=a[i-n];
}
int ans=0;
memset(dp,-1,sizeof(dp));
dfs(1,2*n-1,0);
for(i=1;i<=n;++i){
ans=max(ans,dp[i][i+n-1]);
}
printf("%d\n",ans);
return 0;
}

codevs1154能量项链 环形区间DP 细节的更多相关文章

  1. 能量项链 (区间DP)

    能量项链 (区间DP) 问题引入 能量项链 洛谷 P1063 思路 诸如此类不能线性规划的问题要用到区间DP,区间DP一般就是三层循环,第一层表示区间长度(本题即\(n\)),第二层枚举起点并根据第一 ...

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

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

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

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

  4. codevs——1154 能量项链(区间DP)

    2006年NOIP全国联赛提高组  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题解    题目描述 Description 在Mars星球上,每个Mars人 ...

  5. 石子合并/能量项链【区间dp】

    题目链接:http://www.51mxd.cn/problem.php-pid=737.htm 题目大意:给出n个石子堆以及这n个石子堆中石子数目,每次操作合并两个相邻的石子堆,代价为两个石子堆数目 ...

  6. LuoguP1063 能量项链【区间Dp】

    前天测试考了QAQ.这么经典的区间dp不再开一文好像有点可惜. 内容是从模拟赛结题报告中copy来的.QAQ noip能量项链原题. https://www.luogu.org/problemnew/ ...

  7. 蓝桥杯 能量项链 (区间dp)

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

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

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

  9. Luogu1063 能量项链 (区间DP)

    惊恐地发现自己连区间DP都会错2333 #include <iostream> #include <cstdio> #include <cstring> #incl ...

随机推荐

  1. 如何将python中pip源设置为国内源

    1.Windows Python的学习过程中,往往会学习到很多库,而安装各类库的时候,往往不尽人意,下载速度从几KB到十几KB.甚至下载到一半还超时报错.这都是因为pip源是访问国外的官方源,如果需要 ...

  2. Jmeter非GUI界面对阿里云服务器压测

    一.Jmeter非GUI界面 参数讲解 讲解:非GUI界面,压测参数讲解             -h 帮助            -n 非GUI模式            -t 指定要运行的 JMe ...

  3. jQuery 页面滚动 吸顶 和 吸底

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  4. jQuery 当前展开其他收缩 三级下拉菜单(转载)

    jQuery可展开收缩三级下拉菜单 <!DOCTYPE html> <html> <head> <meta charset="UTF-8" ...

  5. 简话http请求

    一.http请求概念: 1.是指从客户端到服务器端的请求消息.包括:消息首行中,对资源的请求方法.资源的标识符及使用的协议. 包括请求(request)和响应(response) 2.过程: 域名解析 ...

  6. 容器调度 • Docker网络 • 持续交付 • 动态运行应用程序 部署的多元化

    <英雄联盟>在线服务运维之道 - InfoQ https://www.infoq.cn/article/running-online-services-riot/ 第一章 简 介 我是Jo ...

  7. (Shell)Shell命令整理

    目录 常用命令 1. 上传.下载 2. 删除文件和文件夹 3. 目录操作 4. 文件的操作 4.vim 为新添加的文件后缀支持语法高亮 常用命令 1. 上传.下载 上传文件:rz,然后回车弹出上传文件 ...

  8. MySQL 压测

    https://mp.weixin.qq.com/s/vKJZp5cGUetHokGh2EZUXg mysqlslap --iterations=100 --create-schema='test' ...

  9. 使用Robo 3T操作MongoDB数据库

    安装Robo 3T连接MongoDB数据库教程:https://blog.csdn.net/baidu_39298625/article/details/98845789 在IDEA中用三个jar包链 ...

  10. centos /usr/local 和/opt 安装软件你什么不同../configure --prefix=/usr...

    /usr/local下一般是你安装软件的目录,这个目录就相当于在windows下的programefiles这个目录(所有文件在一个文件夹) /opt这个目录是一些大型软件的安装目录,或者是一些服务程 ...