luogu_P4767 [IOI2000]邮局
传送门
Description
高速公路旁边有一些村庄。高速公路表示为整数轴,每个村庄的位置用单个整数坐标标识。没有两个在同样地方的村庄。两个位置之间的距离是其整数坐标差的绝对值。
邮局将建在一些,但不一定是所有的村庄中。为了建立邮局,应选择他们建造的位置,使每个村庄与其最近的邮局之间的距离总和最小。
你要编写一个程序,已知村庄的位置和邮局的数量,计算每个村庄和最近的邮局之间所有距离的最小可能的总和。
Solution
大概是把dp的常见优化的经典练习题都打了一波。
这是四边形不等式优化的题目。证明?百度百科上就很不错了,就不说了。
满足\(f[i][j]\) 的决策点会在\(f[i][j-1]\)和\(f[i+1][j]\)的决策点之间
Code
#include<bits/stdc++.h>
#define ll long long
#define max(a,b) ((a)>(b)?(a):(b))
#define min(a,b) ((a)<(b)?(a):(b))
inline int read()
{
int x=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){x=(x<<3)+(x<<1)+ch-'0';ch=getchar();}
return x*f;
}
#define MN 3005
#define mN 305
int V,P,a[MN],f[MN][mN],q[MN],d[MN][MN],g[MN][mN];
inline int dis(int l,int r)
{
if(d[l][r]) return d[l][r];
else return d[l][r]=q[r]+q[l-1]-q[(l+r)>>1]-q[(l+r-1)>>1];
}
int main()
{
V=read();P=read();
memset(f,0x3f,sizeof f);
register int i,j,k;
for(i=1;i<=V;++i) a[i]=read(),q[i]=q[i-1]+a[i];
std::sort(a+1,a+V+1);
for(i=1;i<=V;++i) f[i][1]=dis(1,i);
for(g[V+1][k=2]=V;k<=P;++k,g[V+1][k]=V)
for(i=V;i>=1;--i)for(j=g[i][k-1];j<=g[i+1][k];++j)
if(f[j][k-1]+dis(j+1,i)<f[i][k])
f[i][k]=f[j][k-1]+dis(j+1,i),g[i][k]=j;
return 0*printf("%d\n",f[V][P]);
}
Blog来自PaperCloud,未经允许,请勿转载,TKS!
luogu_P4767 [IOI2000]邮局的更多相关文章
- COGS 1507. [IOI2000]邮局
1507. [IOI2000]邮局 ★☆ 输入文件:postoffice.in 输出文件:postoffice.out 简单对比时间限制:1 s 内存限制:256 MB [题目描述] ...
- BZOJXXXX: [IOI2000]邮局——四边形不等式优化初探
貌似$BZOJ$上并没有这个题... 是嫌这个题水了么... 还是要氪金权限号??? 这里附上洛谷的题面:洛谷P4767 [IOI2000]邮局 题目描述 高速公路旁边有一些村庄.高速公路表示为整数轴 ...
- [IOI2000] 邮局
## 非常神仙的 wqs 二分优化dp,又学了一招. 首先我们需要先想到一个人类智慧版的前缀和优化. # part 1:violence 然鹅在前缀和优化之前我们先考虑暴力做法:我们可以枚举 i . ...
- 题解——洛谷P4767 [IOI2000]邮局(区间DP)
这题是一道区间DP 思维难度主要集中在如何预处理距离上 由生活经验得,邮局放在中间显然最优 所以我们可以递推求出\( w[i][j] \)表示i,j之间放一个邮局得距离 然后设出状态转移方程 设\( ...
- [LUOGU] P4767 [IOI2000]邮局
https://www.luogu.org/problemnew/show/P4767 四边形不等式好题! 可以设f[i][j]表示前i个村庄,建了j个邮局的最小代价. 转移:f[i][j]=min{ ...
- P4767 [IOI2000]邮局 - 平行四边形不等式优化DP
There is a straight highway with villages alongside the highway. The highway is represented as an in ...
- NOIP2018备考——DP专题练习
P4095 [HEOI2013]Eden 的新背包问题 P2657 [SCOI2009]windy数 P3413 SAC#1 - 萌数 P3205 [HNOI2010]合唱队 P476 ...
- DP的优化
参考资料: 李煜东<算法竞赛进阶指南> 斜率优化 形如: \(f[i] = min\{f[j]+val(i,j)\}\)的dp,多项式\(val(i,j)\)包含\(i,j\)的乘积项 引 ...
- 我的刷题单(8/37)(dalao珂来享受切题的快感
P2324 [SCOI2005]骑士精神 CF724B Batch Sort CF460C Present CF482A Diverse Permutation CF425A Sereja and S ...
随机推荐
- docker安装及基本使用
docker分为docker CE 和docker EE,CE即免费社区版,EE即企业付费版.下面基于centos7安装docker CE,其它linux版本可以参考官方文档https://docs. ...
- VBA分别使用MSXML的DOM属性和XPATH进行网页爬虫
本文要重点介绍的是VBA中的XmlHttp对象(MSXML2.XMLHTTP或MSXML.XMLHTTP),它可以向http服务器发送请求并使用微软XML文档对象模型Microsoft XML Doc ...
- java SE,EE,ME区别
Java SE(Java Platform,Standard Edition):java平台标准版: Java EE(Java Platform.Enterprise Edition):java平台企 ...
- Bigdecimal除法异常
1.异常信息摘要(详细请见文末): java.lang.ArithmeticException: Non-terminating decimal expansion; no exact represe ...
- 【Java】接口和抽象类总结
一.接口 1.1 成员变量(其实是常量) 1.2 方法 二.抽象类 2.1 成员变量 2.2 方法 一.接口 1.1 成员变量(其实是常量) 成员变量默认用 public static final修饰 ...
- redis入门初学知识
一. Redis 介绍 Remote Dictionary Server(Redis)是一个开源的使用 ANSI C 语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value 数据库,并提 ...
- Computer Vision_33_SIFT:A novel coarse-to-fine scheme for automatic image registration based on SIFT and mutual information——2014
此部分是计算机视觉部分,主要侧重在底层特征提取,视频分析,跟踪,目标检测和识别方面等方面.对于自己不太熟悉的领域比如摄像机标定和立体视觉,仅仅列出上google上引用次数比较多的文献.有一些刚刚出版的 ...
- 第二篇:Python基本知识
这一篇我们简单的介绍一下Python学习的基本知识-->Python文件是如何运行.Python文件打开通常会有两行注释,那么这两行注释是什么:上篇提到的字节码,这些字节码都存储在哪?即pyc文 ...
- 解析Linux中LVM与磁盘配额
LVM 逻辑卷管理 LVM 概述 LVM 是 Linux 操作系统中对磁盘分区进行管理的一种逻辑机制,它是建立在硬盘和分区之上.文件系统之下的一个逻辑层,在建立文件系统时屏蔽了下层的磁盘分区布局,因此 ...
- JIT优化的小问题
同事问了个问题,挺有意思的,代码: public class TestJIT{ private static boolean sss; public static void main(String[] ...