http://acm.hdu.edu.cn/showproblem.php?pid=3506

题意:环形石子合并取最小值= =(n<=1000)

#include <cstdio>
#include <algorithm>
using namespace std;
const int N=2005, oo=~0u>>1;
int a[N], w[N], d[N][N], s[N][N], n;
int main() {
while(~scanf("%d", &n)) {
for(int i=1; i<=n; ++i) scanf("%d", &a[i]), a[i+n]=a[i];
n=2*n;
int ans=oo;
for(int i=1; i<=n; ++i) w[i]=w[i-1]+a[i];
for(int i=1; i<n; ++i) d[i][i+1]=a[i]+a[i+1], s[i][i+1]=i+1;
for(int len=3; len<=n; ++len) {
for(int i=1; i<=n-len+1; ++i) {
int j=i+len-1, l=s[i][j-1], r=s[i+1][j], &now=d[i][j], &pos=s[i][j];
now=oo;
for(int k=l; k<=r; ++k) {
if(now>=d[i][k-1]+d[k][j]) {
now=d[i][k-1]+d[k][j];
pos=k;
}
}
now+=w[j]-w[i-1];
}
}
for(int i=1; i<=(n>>1); ++i) ans=min(ans, d[i][i+(n>>1)-1]);
printf("%d\n", ans);
}
return 0;
}

  

妈呀来学了下四边形不等式优化= =

首先对于一类2D1D的方程:

$$
d(i, j)=
\begin{cases}
min \{ d(i, k-1)+d(k, j) \}+w(i, j) & i<j \\
0 & i=j \\
oo & i>j
\end{cases}
$$

(取$max$的我还没分析过,不过我们能将$w(i, j)=-w(i, j)$然后将$max$取$min$就好啦hhh(咦这应该没问题吧?))

我们有下边的定理(证明可以去看论文或者q我= =)

如果$i \le i' \le j \le j'$就有$w(i, j)+w(i', j') \le w(i', j)+w(i, j')$(四边形不等式)

且如果$i \le i' \le j' \le j$就有$w(i', j') \le w(i, j)$(区间单调性)

设$s(i, j)=max \{ k|d(i, j)=d(i, k-1)+d(k, j)+w(i, j) \}$那么有:

$$
\begin{align}
d(i, j)+d(i', j') & \le d(i', j)+d(i, j') \\
s(i, j) \le s(i, j+1) & \le s(i+1, j+1)
\end{align}
$$

而$s$的取值每一个确定的$l=j-i+1$是$O(n)$的(妈呀我看不懂论文上的证明啊= =,这样搞:(s[2,L+1]-s[1,L])+(s[3,L+2]-s[2,L+1])…+(s[n-L+1,n]-s[n-L,n-1])=s[n-L+1,n]-s[1,L]≤n)所以方程由$O(n^3)$降为$O(n^2)$

于是这题的$sum$显然满足四边形不等式和区间单调性,所以本题成为水题= =

【HDU】3506 Monkey Party的更多相关文章

  1. 【HDU】4888 Redraw Beautiful Drawings 网络流【推断解是否唯一】

    传送门:pid=4888">[HDU]4888 Redraw Beautiful Drawings 题目分析: 比赛的时候看出是个网络流,可是没有敲出来.各种反面样例推倒自己(究其原因 ...

  2. 【转】Android Monkey 命令行可用的全部选项

    常规 事件 约束限制 调试 原文参见:http://www.douban.com/note/257030384/ 常规 –help 列出简单的用法. -v 命令行的每一个 -v 将增加反馈信息的级别. ...

  3. 【HDU】2191 多重背包问题

    原题目:悼念512汶川大地震遇难同胞——珍惜现在,感恩生活 [算法]多重背包(有限背包) 动态规划 [题解]http://blog.csdn.net/acdreamers/article/detail ...

  4. 【HDU】6110 路径交(2017百度之星) 线段树+RMQ-LCA+树链的交

    [题目]2017"百度之星"程序设计大赛 - 初赛(A) [题意]给定n个点的带边权树,m条编号1~m的路径,Q次询问编号区间[L,R]所有链的交集的长度.n<=500000 ...

  5. 【HDU】6148 Valley Numer 数位DP

    [算法]数位DP [题意]定义V-number为从左到看单位数字未出现先递增后递减现象的数字,求0~N中满足条件的数字个数.T<=200,lenth(n)<=100 [题解]百度之星201 ...

  6. 【HDU】5269 ZYB loves Xor I

    [算法]trie [题解] 为了让数据有序,求lowbit无法直接排序,从而考虑倒过来排序,然后数据就会呈现出明显的规律: 法一:将数字倒着贴在字典树上,则容易发现两数的lowbit就是它们岔道结点的 ...

  7. 【HDU】3068 最长回文

    [算法]manacher [题解][算法]字符串 #include<cstdio> #include<algorithm> #include<cstring> us ...

  8. 【HDU】2222 Keywords Search

    [算法]AC自动机 [题解]本题注意题意是多少关键字能匹配而不是能匹配多少次,以及可能有重复单词. 询问时AC自动机与KMP最大的区别是因为建立了trie,所以对于目标串T与自动机串是否匹配只需要直接 ...

  9. 【HDU】6012 Lotus and Horticulture (BC#91 T2)

    [算法]离散化 [题解] 答案一定存在于区间的左右端点.与区间左右端点距离0.5的点上 于是把所有坐标扩大一倍,排序(即离散化). 让某个点的前缀和表示该点的答案. 初始sum=∑c[i] 在l[i] ...

随机推荐

  1. linux cpuInfo

    转自:http://blog.csdn.net/lgstudyvc/article/details/7889364   /proc/cpuinfo文件分析 在Linux系统中,提供了proc文件系统显 ...

  2. Linux Shell 高级编程技巧4----几个常用的shell脚本例子

    4.几个常用的shell脚本例子    4.0.在写脚本(同样适用在编程的时候),最好写好完善的注释    4.1.kill_processes.sh(一个杀死进程的脚本) #!/bin/bash c ...

  3. 跳出IFrame几种方式

    1. <script type="text/javascript"> if (top.location !== self.location) { top.locatio ...

  4. 【翻译十六】java-固定对象的定义方法

    A Strategy for Defining Immutable Objects The following rules define a simple strategy for creating ...

  5. 使用Visual Studio Code开发AngularJS应用

    (此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 题记:VSC发布之后,尤其最近刚刚更新到0.3之后,社区出现了很多介绍VSC使用的好文章.比 ...

  6. Mesa 3D

    Mesa 3D是一个在MIT许可证下开放源代码的三维计算机图形库,以开源形式实现了OpenGL的应用程序接口. OpenGL的高效实现一般依赖于显示设备厂商提供的硬件,而Mesa 3D是一个纯基于软件 ...

  7. ubuntu下整合eclipse和javah生成jni头文件开发android的native程序(转)

    本文介绍两种利用javah命令生成jni头文件的方法,第一种为大众所知的javah命令,第二种为整合javah到eclipse里面.推荐第二种方式,方便快捷,随时修改随时生成 0:前提和条件: 1:u ...

  8. Android NDK开发实例教程

    WINDOWS系统+ Eclipse + NDK+Android 最近开始学习Android平台开发,Android还没有玩转,Java也是刚入门,这又要开始在Android中调用C语言,需要利用ND ...

  9. 使用 json_in_java

    // */ // ]]> java_in_json Table of Contents 1. Java 使用 Json 1.1. 下载地址: 1.2. 构造 json 字符串 1.3. 解析 j ...

  10. JVM内存配置详解

    前段时间在一个项目的性能测试中又发生了一次OOM(Out of swap sapce),情形和以前网店版的那次差不多,比上次更奇怪的是,此次搞了几天之后啥都没调整系统就自动好了,死活没法再重现之前的O ...