[CF1101F]Trucks and Cities:分治优化决策单调性
分析
好像是有一个叫这个名字的算法,链接。
令\(f[i][j][k]\)表示一辆每公里耗油量为\(1\)的货车从\(i\)到\(j\)中途加\(k\)次油最小的油箱容量。枚举所有的起点和中途加油的次数,这样就固定了两维,显然有DP方程:
\]
根据生活经验题意显然这个DP具有决策单调性,可以用分治优化一下。
具体来说就是每次大力求出\(mid=(l+r)/2\)的决策点,然后分治就好了,显然分治左区间的决策点一定不在\(mid\)的决策点(这里一定要注意是\(mid\)的决策点而不是\(mid\))的右边,分治右区间的决策点一定不在\(mid\)的决策点的左边。
代码
#include <bits/stdc++.h>
#define rin(i,a,b) for(register int i=(a);i<=(b);++i)
#define irin(i,a,b) for(register int i=(a);i>=(b);--i)
#define trav(i,a) for(register int i=head[a];i;i=e[i].nxt)
typedef long long LL;
using std::cin;
using std::cout;
using std::endl;
inline int read(){
int x=0,f=1;char ch=getchar();
while(!isdigit(ch)){if(ch=='-')f=-1;ch=getchar();}
while(isdigit(ch)){x=x*10+ch-'0';ch=getchar();}
return x*f;
}
const int MAXN=405;
int n,m,a[MAXN],f[MAXN][MAXN][MAXN];
void solve(int bg,int cnt,int l,int r,int ql,int qr){
if(l>r) return;
int mid=((l+r)>>1),opt=0,temp=0;
rin(i,ql,std::min(qr,mid))
if(!opt||std::max(a[mid]-a[i],f[bg][i][cnt-1])<temp)
temp=std::max(a[mid]-a[i],f[bg][i][cnt-1]),opt=i;
f[bg][mid][cnt]=temp;
solve(bg,cnt,l,mid-1,ql,opt);
solve(bg,cnt,mid+1,r,opt,qr);
}
int main(){
n=read(),m=read();
rin(i,1,n) a[i]=read();
rin(i,1,n) rin(j,i,n) f[i][j][0]=a[j]-a[i];
rin(i,1,n) rin(j,1,n) solve(i,j,i+1,n,i+1,n);
LL ans=0;
rin(i,1,m){
int s=read(),t=read(),c=read(),r=read();
ans=std::max(ans,1ll*f[s][t][r]*c);
}
printf("%I64d\n",ans);
return 0;
}
[CF1101F]Trucks and Cities:分治优化决策单调性的更多相关文章
- bzoj 2739 最远点——分治处理决策单调性
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2739 分治处理决策单调性的思想就是先找到一个询问,枚举所有可能的转移找到它的决策点,那么这个 ...
- [HNOI2008]玩具装箱TOY --- DP + 斜率优化 / 决策单调性
[HNOI2008]玩具装箱TOY 题目描述: P教授要去看奥运,但是他舍不下他的玩具,于是他决定把所有的玩具运到北京. 他使用自己的压缩器进行压缩,其可以将任意物品变成一堆,再放到一种特殊的一维容器 ...
- CF1101F Trucks and Cities
题意:给定线段上n个特殊点,m次询问. 每次询问:在第l个点到第r个点这一段区间中选出k个点,将其分成k + 1段.使得最长的段尽量短. 输出这m个询问中答案最大的. n<=400,m<= ...
- CF868F Yet Another Minimization Problem 分治决策单调性优化DP
题意: 给定一个序列,你要将其分为k段,总的代价为每段的权值之和,求最小代价. 定义一段序列的权值为$\sum_{i = 1}^{n}{\binom{cnt_{i}}{2}}$,其中$cnt_{i}$ ...
- [NOI2009]诗人小G 决策单调性优化DP
第一次写这种二分来优化决策单调性的问题.... 调了好久,,,各种细节问题 显然有DP方程: $f[i]=min(f[j] + qpow(abs(sum[i] - sum[j] - L - 1))); ...
- CF868F Yet Another Minimization Problem(决策单调性)
题目描述:给定一个序列,要把它分成k个子序列.每个子序列的费用是其中相同元素的对数.求所有子序列的费用之和的最小值. 输入格式:第一行输入n(序列长度)和k(需分子序列段数).下一行有n个数,序列的每 ...
- 【洛谷3515】[POI2011] Lightning Conductor(决策单调性)
点此看题面 大致题意: 给你一个序列,对于每个\(i\)求最小的自然数\(p\)使得对于任意\(j\)满足\(a_j\le a_i+p-\sqrt{|i-j|}\). 证明单调性 考虑到\(\sqrt ...
- Codeforces 868F. Yet Another Minimization Problem【决策单调性优化DP】【分治】【莫队】
LINK 题目大意 给你一个序列分成k段 每一段的代价是满足\((a_i=a_j)\)的无序数对\((i,j)\)的个数 求最小的代价 思路 首先有一个暴力dp的思路是\(dp_{i,k}=min(d ...
- bzoj4518: [Sdoi2016]征途(DP+决策单调性分治优化)
题目要求... 化简得... 显然m和sum^2是已知的,那么只要让sigma(si^2)最小,那就变成了求最小平方和的最小值,经典的决策单调性,用分治优化即可. 斜率优化忘得差不多就不写了 #inc ...
随机推荐
- [百度知道]ssm和ssh各自的优势
https://zhidao.baidu.com/question/875108451824176892.html SSM和SSH不同主要在MVC实现方式,以及ORM持久化方面不同(Hiibernat ...
- linux项目运行环境搭建
# 命令查看可修改分辨率 xrandr # 选择要修改的分辨率 xrandr -s 1360x768# 删除文件命令 rm -rf 文件名/ # XShell工具进行远程连接了 sudo apt ...
- Kick Start 2019 Round D
X or What? 符号约定: $\xor$ 表示异或. popcount($x$) 表示非负整数 $x$ 的二进制表示里数字 1 出现的次数.例如,$13 = 1101_2$,则 popcount ...
- C语言---程序的一般形式、数据类型、常量变量、运算符、表达式、格式化输入输出
1. 程序的一般形式 (1)注释 ① 分类:单行注释( // ): 注释一行.多行注释( /**/ ): 在这个区间内,都属于多行注释,可以换行. ② 作用:提示代码的作用,提示思路 不写注释的后 ...
- linux下mysql的常用命令
更改mysql数据库root的密码 首次进入数据库是不用密码的: [root@localhost ~]# /usr/local/mysql/bin/mysql -uroot Welcome to th ...
- Win7 MongoDB可视化工具Robo 3T 1.2.1(robomongo)的安装使用
软件版本: Robo 3T 1.2.1 下载网址: https://robomongo.org/campaign 进入robomongo官网,点击download,进入下载页面 这里选择下载 Robo ...
- PHP之常用第三方库
汇总常用的第三方库,方便快速进行开发,避免重复造轮子 1. 时间相关 nesbot/carbon(在编写 PHP 应用时经常需要处理日期和时间,使用Carbon 会很方便– 继承自 PHPDateTi ...
- IntelliJ IDEA 2017 提示“Unmapped Spring configuration files found.Please configure Spring facet.”解决办法
当把自己的一个项目导入IDEA之后,Event Log提示“Unmapped Spring configuration files found.Please configure Spring face ...
- 经典Spring入门基础教程详解
经典Spring入门基础教程详解 https://pan.baidu.com/s/1c016cI#list/path=%2Fsharelink2319398594-201713320584085%2F ...
- MATLAB仿真 让波形动起来
dt=1e-6;T=2*1e-3;for N=0:500; t=N*T+(0:dt:T); input=2*cos(2*pi*1005*t); carrier=5*cos(2*pi*(1e4)*t+0 ...