noi.ac NA534 【猫】
一眼暴力DP
再一眼决策单调性?
打个表以为是四边形不等式??
最后发现是斜率优化???
于是成功写了个假斜率优化真四边形不等式拿了\(80\)
设\(f[i][j]\)表示有\(i\)个工作人员出发接回\(j\)只猫的最小等待时间和,转移点为\(u\),则有:
\(f[i][j]+sum[j]=f[i-1][u]+j\cdot t[j]-u\cdot t[j]+sum[u]\)
于是随随便便写个斜率优化就过了
#include<bits/stdc++.h>
#define dqfront dq[dqfr]
#define dqsec dq[dqfr+1]
#define dqback dq[dqen]
#define dqbsec dq[dqen-1]
#define dqpb(u) dq[++dqen]=u
#define Lf long double
#define pii pair<int,int>
#define fi first
#define se second
#define mk make_pair
using namespace std;
const int N=1e5+5;
int n,m,p,d[N],h[N],t[N],sumd[N];
long long f[2][N],sumt[N];
int dq[N],dqfr,dqen;
int fr[1010][N];
long long cross(int u,int v,int w,int op){
return 1LL*(v-u)*(f[op][w]+sumt[w]-f[op][v]-sumt[v])-1LL*(w-v)*(f[op][v]+sumt[v]-f[op][u]-sumt[u]);
}
long long cross(pii u,pii v){
return 1LL*u.fi*v.se-1LL*u.se*v.fi;
}
int main(){
scanf("%d%d%d",&n,&m,&p);
if(p>=m){
printf("0\n");return 0;
}
for(int i=2;i<=n;i++){
scanf("%d",&d[i]);
sumd[i]=sumd[i-1]+d[i];
}
for(int i=1;i<=m;i++){
scanf("%d%d",&h[i],&t[i]);
t[i]-=sumd[h[i]];
}
sort(t+1,t+m+1);
for(int i=m;i>0;i--){
t[i]-=t[1];
}
for(int i=1;i<=m;i++){
sumt[i]=sumt[i-1]+t[i];
}
for(int i=1;i<=m;i++){
f[1][i]=1LL*i*t[i]-sumt[i];
}
for(int i=2;i<=p;i++){
dqfr=0;dqen=0;
for(int j=1;j<=m;j++){
while(dqfr<dqen&&cross(mk(1,t[j]),mk(dqsec-dqfront,f[(i&1)^1][dqsec]+sumt[dqsec]-f[(i&1)^1][dqfront]-sumt[dqfront]))<=0){
++dqfr;
}
fr[i][j]=dqfront;
f[i&1][j]=f[(i&1)^1][dqfront]+1LL*(j-dqfront)*t[j]+sumt[dqfront]-sumt[j];
while(dqfr<dqen&&cross(dqbsec,dqback,j,(i&1)^1)<=0){
--dqen;
}
dqpb(j);
}
}
printf("%lld\n",f[p&1][m]);
return 0;
}
noi.ac NA534 【猫】的更多相关文章
- noi.ac #534 猫
题目链接:戳我 [问题描述] 有n座山,m只猫和p个工作人员.山从左往右编号为1∼n,山i和i−1之间的距离是di米. 有一天,猫都到山上去玩了:第i只猫会到山hi去,并一直玩到时间ti,之后就在那座 ...
- # NOI.AC省选赛 第五场T1 子集,与&最大值
NOI.AC省选赛 第五场T1 A. Mas的童年 题目链接 http://noi.ac/problem/309 思路 0x00 \(n^2\)的暴力挺简单的. ans=max(ans,xor[j-1 ...
- NOI.ac #31 MST DP、哈希
题目传送门:http://noi.ac/problem/31 一道思路好题考虑模拟$Kruskal$的加边方式,然后能够发现非最小生成树边只能在一个已经由边权更小的边连成的连通块中,而树边一定会让两个 ...
- NOI.AC NOIP模拟赛 第五场 游记
NOI.AC NOIP模拟赛 第五场 游记 count 题目大意: 长度为\(n+1(n\le10^5)\)的序列\(A\),其中的每个数都是不大于\(n\)的正整数,且\(n\)以内每个正整数至少出 ...
- NOI.AC NOIP模拟赛 第六场 游记
NOI.AC NOIP模拟赛 第六场 游记 queen 题目大意: 在一个\(n\times n(n\le10^5)\)的棋盘上,放有\(m(m\le10^5)\)个皇后,其中每一个皇后都可以向上.下 ...
- NOI.AC NOIP模拟赛 第二场 补记
NOI.AC NOIP模拟赛 第二场 补记 palindrome 题目大意: 同[CEOI2017]Palindromic Partitions string 同[TC11326]Impossible ...
- NOI.AC NOIP模拟赛 第一场 补记
NOI.AC NOIP模拟赛 第一场 补记 candy 题目大意: 有两个超市,每个超市有\(n(n\le10^5)\)个糖,每个糖\(W\)元.每颗糖有一个愉悦度,其中,第一家商店中的第\(i\)颗 ...
- NOI.AC NOIP模拟赛 第四场 补记
NOI.AC NOIP模拟赛 第四场 补记 子图 题目大意: 一张\(n(n\le5\times10^5)\)个点,\(m(m\le5\times10^5)\)条边的无向图.删去第\(i\)条边需要\ ...
- NOI.AC NOIP模拟赛 第三场 补记
NOI.AC NOIP模拟赛 第三场 补记 列队 题目大意: 给定一个\(n\times m(n,m\le1000)\)的矩阵,每个格子上有一个数\(w_{i,j}\).保证\(w_{i,j}\)互不 ...
随机推荐
- 大觅网02Day
docker环境搭建:(注:请先完成上一次的环境搭建) A.部署环境(导入上次系统的时候修改虚拟机的内存) 1.安装系统自带版本Docker:apt-get install docker.io 2.查 ...
- 【OpenJ_Bailian - 2790】迷宫(bfs)
-->迷宫 Descriptions: 一天Extense在森林里探险的时候不小心走入了一个迷宫,迷宫可以看成是由n * n的格点组成,每个格点只有2种状态,.和#,前者表示可以通行后者表示不 ...
- sublime text 修改侧边栏字体大小
ctrl+shift_p 安装PackageResourceViewer,通过**PackageResourceViewer **这个插件来实现. 打开这个插件,选择Open Resource 输入T ...
- MSF魔鬼训练营-3.2.2 操作系统辨识
利用操作系统视频进行社会工程学攻击.例如在探测到目标用户所使用的网络设备.服务器设备厂家型号等信息后.可伪装成相关厂家的技术人员通过电话.邮件等方式与系统管理员取得联系得到信任.NMAP 示例: 使用 ...
- [转帖]Docker常用命令总结
Docker常用命令总结 http://www.ha97.com/5546.html 发表于: Linux, 互联网, 虚拟化与云计算 | 作者: 博客教主 标签: docker,常用命令,总结 PS ...
- [转帖]规模化敏捷-简要对比SAFe、LeSS和DAD模式
规模化敏捷-简要对比SAFe.LeSS和DAD模式 http://blog.sina.com.cn//s/blog_15e1409550102x5yx.html 分类: 敏捷开发 目前有三种将Sc ...
- Ubuntu基本操作(博主想上传图片给服务器的一些命令)
1.将当前目录下的文件移动至指定文件夹,这里用移动至网站的根目录做示范 sudo mv bamboo.jpg /val/www/html mv bamboo.jpg /val/www/html 2.进 ...
- JDK安装及JAVA环境变量配置(JDK1.8版本)
一:JDK官网下载地址:https://www.oracle.com/technetwork/java/javase/downloads/jdk12-downloads-5295953.html JD ...
- golang substring
在java下习惯了String.subString(start,end) 然后再golang继续敲substring木有了,看了下代码,也是原生支持的 但是百度发现有些人竟然把字符串转成字符数组再根据 ...
- [转]Opcode是啥以及如何使用好Opcache
转载链接:Opcode是啥以及如何使用好Opcache 啥是Opcode? 我们在日常的PHP开发过程中,应该经常会听见Opcache这个词,那么啥是Opcode呢? Opcache 的前生是 Opt ...