正题

luogu-CF 311B


题目大意

有n个点,p个铲屎官和m只猫
did_idi​表示i到i-1的距离
第i只猫在tit_iti​这个时间hih_ihi​这个点开始等待铲屎官来接它走
铲屎官会以一个单位时间走一个单位长度的速度从第一个点向最后一个点走(不能停止),当他走到点i时,若这里有猫在等,那他就会接走他
现在让你来安排各个铲屎官的出发时间,使得每只猫等待时间之和最小


解题思路

设fi,jf_{i,j}fi,j​为i个铲屎官接前j只猫的最小等待时间之和

那么有:

fi,j=min{fi−1,k+∑c=k+1j(tj−tc)}=min{fi−1,k+∑c=k+1jtj−∑c=k+1jtc}=min{fi−1,k+t[j]∗(j−k)−sumtj+sumtk}=min{fi−1,k+tj∗j−tj∗k−sumtj+sumtk}\begin{aligned} f_{i,j} & = min\{f_{i - 1,k}+\sum_{c = k+1}^{j}(t_j-t_c)\} \\ & = min\{f_{i - 1,k}+\sum_{c = k+1}^{j}t_j - \sum_{c = k+1}^{j}t_c\} \\ & = min\{f_{i-1,k} + t[j]*(j-k) - sumt_j + sumt_k\} \\ & = min\{f_{i-1,k} + t_j*j - t_j*k - sumt_j + sumt_k\} \end{aligned}fi,j​​=min{fi−1,k​+c=k+1∑j​(tj​−tc​)}=min{fi−1,k​+c=k+1∑j​tj​−c=k+1∑j​tc​}=min{fi−1,k​+t[j]∗(j−k)−sumtj​+sumtk​}=min{fi−1,k​+tj​∗j−tj​∗k−sumtj​+sumtk​}​

对于决策点a、b,如果a>b,且a比b优,那么有:

fi−1,a+tj∗j−tj∗a−sumtj+sumta<fi−1,b+tj∗j−tj∗b−sumtj+sumtbfi−1,a−tj∗a+sumta<fi−1,b−tj∗b+sumtb(fi−1,a+sumta)−(fi−1,b+sumtb)a−b<tj\begin{aligned} \\ f_{i-1,a} + t_j*j - t_j*a - sumt_j + sumt_a &< f_{i-1,b} + t_j*j - t_j*b - sumt_j + sumt_b \\ f_{i-1,a} - t_j*a + sumt_a &< f_{i-1,b} - t_j*b + sumt_b \\ \frac{(f_{i-1,a}+sumt_a)-(f_{i-1,b}+sumt_b)}{a-b}&<t_j\end{aligned}fi−1,a​+tj​∗j−tj​∗a−sumtj​+sumta​fi−1,a​−tj​∗a+sumta​a−b(fi−1,a​+sumta​)−(fi−1,b​+sumtb​)​​<fi−1,b​+tj​∗j−tj​∗b−sumtj​+sumtb​<fi−1,b​−tj​∗b+sumtb​<tj​​

然后带入模板即可


代码

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define ll long long
using namespace std;
ll ww, n, m, c, xx, yy, w[100010], t[100010], l[100010], r[100010], sumt[100010], x[110][100010], f[110][100010];
int d[110][100010];
int main()
{scanf("%lld%lld%lld", &ww, &n, &m);for (ll i = 2; i <= ww; ++i){scanf("%lld", &w[i]);w[i] += w[i - 1];}for (ll i = 1; i <= n; ++i){scanf("%lld%lld", &xx, &yy);t[i] = yy - w[xx];//计算出铲屎官的出发时间}sort(t+1, t+1+n);for (ll i = 1; i <= n; ++i)sumt[i] = sumt[i - 1] + t[i];for (ll i = 1; i <= m; ++i)for (ll j = 1; j <= n; ++j){c = i - 1;while(l[c] < r[c] && x[c][d[c][l[c] + 1]] - x[c][d[c][l[c]]] < t[j] * (d[c][l[c] + 1] - d[c][l[c]])) l[c]++;f[i][j] = f[c][d[c][l[c]]] + t[j] * (j - d[c][l[c]]) - sumt[j] + sumt[d[c][l[c]]];x[i][j] = f[i][j] + sumt[j];while(l[i] < r[i] && (x[i][j]-x[i][d[i][r[i]]])*(d[i][r[i]]-d[i][r[i] - 1]) < (x[i][d[i][r[i]]]-x[i][d[i][r[i] - 1]])*(j-d[i][r[i]])) r[i]--;d[i][++r[i]] = j;}printf("%lld", f[m][n]);return 0;
}

【斜率优化】Cats Transport(luogu-CF 311B)相关推荐

  1. 提高篇 第五部分 动态规划 第6章 斜率优化动态规划

    例1 任务安排(TYVJ1098) [tyvj1098]任务安排(dp)_薇小薇-CSDN博客 Tyvj1098 任务安排_Monster__Yi的博客-CSDN博客 P2365 任务安排 任务安排 ...

  2. CF-311B Cats Transport(斜率优化DP)

    题目链接 题目描述 小S是农场主,他养了 \(M\)只猫,雇了 \(P\) 位饲养员. 农场中有一条笔直的路,路边有 \(N\) 座山,从 \(1\) 到 \(N\)编号. 第 \(i\) 座山与第 ...

  3. Codeforces311 B. Cats Transport(斜率优化dp)

    题意: m只猫,p个人 n座山,第i座山和第i-1座山的距离为d[i],人在山1位置. 第i只猫去山h[i]玩,玩到t[i]结束,然后原地等候. 人需要走到h[i]并带走猫,一个人可以同时带无限只猫. ...

  4. CF311B Cats Transport(斜率优化)

    题目描述 Zxr960115 是一个大农场主.他养了m只可爱的猫子,雇佣了p个铲屎官.这里有一条又直又长的道路穿过了农场,有n个山丘坐落在道路周围,编号自左往右从1到n.山丘i与山丘i-1的距离是Di ...

  5. luogu P5468 [NOI2019]回家路线 (斜率优化、DP)

    题目链接: (luogu) https://www.luogu.org/problemnew/show/P5468 题解: 爆long long毁一生 我太菜了,这题这么简单考场上居然没想到正解-- ...

  6. BZOJ 3203 Luogu P3299 [SDOI2013]保护出题人 (凸包、斜率优化、二分)

    惊了,我怎么这么菜啊.. 题目链接: (bzoj)https://www.lydsy.com/JudgeOnline/problem.php?id=3203 (luogu)https://www.lu ...

  7. CF311B-Cats Transport【斜率优化dp】

    正题 题目链接:https://www.luogu.com.cn/problem/CF311B 题目大意 nnn座山在一条线上,有mmm只猫,第iii只从tit_iti​开始在第xix_ixi​座山上 ...

  8. 【斜率优化】仓库建设(luogu 2120)

    仓库建设 luogu 2120 题目大意 有一个斜坡,上面有n个工厂(山顶是1,山脚是nnn,工厂都是漏填),上面有pip_ipi​个货物,和工厂1的距离为x1x_1x1​ 现在有一场大雨,你可以在某 ...

  9. 【学习笔记】斜率优化

    [学习笔记]斜率优化 [SDOI2012]任务安排 斜率优化入门题: 设\(f(x)\)为\(F(x)\)的后缀和,\(t(x)\)为\(T(x)\)的前缀和.\(dp(i)\)表示完成到第\(i\) ...

最新文章

  1. OpenCV 【二十】给图像添加边界
  2. 身份证敏感信息处理 图片添加蒙版
  3. Java局部变量final
  4. mysql group by与order by的研究--分类中最新的内容
  5. java定时增量同步,一种可配置的定时数据同步方法与流程
  6. springcloud云服务架构-HongHu commonservice-eureka项目构建过程
  7. 一道无限级分类题的 PHP 实现
  8. “行业爆点可期,成本过高仍然是难题”年终盘点之激光雷达
  9. asp.net 获取计算机启动时间
  10. 网络通信数据传输原理
  11. 推荐一套linux视频-----很棒
  12. 在HFSS中用vbs脚本跑马灯?
  13. 北大中文核心期刊目录2021年 电工技术
  14. 数学建模真题训练——2003B题 CUMCM 露天矿生产的车辆安排(原创)
  15. spark python编程 林子雨_林子雨-Spark编程基础Python版-厦门大学数据库室.ppt
  16. 使用java Graphics 绘图工具生成顺丰快递电子面单
  17. android-倒计时工具类
  18. Heterogeneous Graph Attention Network翻译
  19. APISpace 二维码生成器API
  20. 软件产品上线的基础知识

热门文章

  1. oracle 12c 多线程,Oracle 12c(12.1)中性能优化功能增强之通过参数THREADED_EXECTION使用多线程模型...
  2. as本地仓库更改_将gitee仓库连接GitHub Desktop。新建更改仓库并上传至gitee。
  3. php判断数组下标,php判断json或者数组格式与给定格式是否一致
  4. python类的参数加self_python类参数self使用示例
  5. 机器学习之乳腺癌问题(SVM)
  6. [SpringSecurity]基本原理_过滤器链
  7. [汇编语言]实验:应用更灵活的寻址方式来定位内存地址
  8. [USACO1.5]八皇后 Checker Challenge
  9. matlab中图像轮廓变细,Matlab中,用bwmorph函数提取二进制图像的轮廓
  10. 朗文3000词汇表带音标_英语零基础音标语法都不会词汇量3000 学雅思到6/6.5分 需要多久 该如何做?...