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. 对Object类中方法的深入理解

    看一下API中关于Object的介绍: 类 Object 是类层次结构的根类.每个类都使用 Object 作为超类.所有对象(包括数组)都实现这个类的方法. 那么Object中到底有哪些方法,各自有什 ...

  2. hdu 1247:Hat’s Words(字典树,经典题)

    Hat’s Words Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total ...

  3. C++中的虚函数(表)实现机制以及用C语言对其进行的模拟实现

    tfref 前言 C++对象的内存布局 只有数据成员的对象 没有虚函数的对象 拥有仅一个虚函数的对象 拥有多个虚函数的对象 单继承且本身不存在虚函数的继承类的内存布局 本身不存在虚函数(不严谨)但存在 ...

  4. C# 非UI线程对控件的控制

    第一步:定义委托 public delegate void wei(string ss); 第二步:控制UI的方法 public void get1(string ss) { richTextBox1 ...

  5. android 入门-android属性介绍

      android:visibility="gone" 不保留view控件所占有的空间 隐藏 android:visibility="invisible" 保留 ...

  6. [Eclipse] Eclipse配置Tomcat插件

    1 . Eclipse IDE 3.6 for Java EE Developersat- 5.5.28 或者以上版本 : 2 . 安装 Tomcat 插件 , 文件名: tomcatPluginV3 ...

  7. 5.linux内核模块基础,内核模块学习

    linux内核模块基础 一.定义 Linux 内核的整体结构非常庞大,其包含的组件也非常多,如何使用这些组件呢: 方法 1:把所有的组件都编译进内核文件,即:zImage 或 bzImage,但这样会 ...

  8. ok6410按键中断编程,linux按键裸机

    6410按键中断编程 一.流程分析 外部中断控制寄存器(s3c6410x  359页) 1.EINTxCONy: 外部中断组x的第y个控制器.这个就是设置中断的触发方式.有5种触发方式. 2.EINT ...

  9. Javascript 学习之路:鼠标长按事件

    <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...

  10. 智能车学习(一)—— 硬件准备

    一.硬件环境准备 1.烧写器焊接 (1)原理图: (2)焊接成品图 2.电源模块: 3.屏幕+键盘 4.单片机 二.软件环境准备 1.安装air6.7 2.安装JLINK驱动 3.安装软件包寄存在GI ...