中文题。。题意略

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

于是枚举中间节点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. Py第一次练习,第二次练习

    有两个列表      l1 = [11,22,33]        l2 = [22,33,44] 1.获取内容相同的元素列表2.获取l1中有l2中没有的元素列表3.获取l1和l2中不同的元素列表 l ...

  2. Cisco发现协议

    CDP Cisco Discovery Protocol: 思科发现协议 是一个提供关于直接相连的交换机.路由器和其它Cisco设备的综合信息的专有工具 CDP 能够发现直接相邻的设备而不管这些设备所 ...

  3. (10)-Python3之--引入

    1.什么是模块 .py文件就是模块 模块名有命名要求: 1.不要以数字.下划线开头.特殊符号.也不要以中文开头. 2.通常来说,都是以字母开头. 3.不要以关键字来命名.内置函数.内置模块.不要以第三 ...

  4. Jmeter接口自动化测试系列之函数使用及扩展

    介绍一下Jmeter自带函数的使用和 函数扩展,来满足测试工作中的各种需求! Jmeter自带函数 点击函数帮助助手图标,弹出函数助手框,可以选择各种各样的函数 举例: _Random 获取随机数,可 ...

  5. gradles理解和文件配置

    gradle gradle tasks :查看所有的taske命令 bootJar:打包,讲项目的所有依赖和主工程代码打包,一个可直接执行的一个包,不需要tomcat运行 gradle使用bootja ...

  6. How Load Balancing Policies Work

    How Load Balancing Policies Work https://docs.cloud.oracle.com/en-us/iaas/Content/Balance/Reference/ ...

  7. 正向代理 forward proxy、反向代理 reverse proxy、透明代理 transparent proxy

    https://zh.wikipedia.org/wiki/反向代理 反向代理在计算机网络中是代理服务器的一种.服务器根据客户端的请求,从其关系的一组或多组后端服务器(如Web服务器)上获取资源,然后 ...

  8. A1Z26 Cipher - Letter Number A=1 B=2 C=3 - Online Decoder, Translator https://www.dcode.fr/letter-number-cipher

    A1Z26 Cipher - Letter Number A=1 B=2 C=3 - Online Decoder, Translator https://www.dcode.fr/letter-nu ...

  9. 洛谷P4317

    Description 定义 \(sum(i)\) 表示 \(i\) 的二级制中 1 的个数 给定一个 N,求 \(\prod_{i=1}^N sum(i)\) Solution 显然是数位 DP 考 ...

  10. bzoj 2038(莫队算法)

    2038: [2009国家集训队]小Z的袜子(hose) 时间限制: 20 Sec  内存限制: 259 MB 题目描述 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来 ...