题意:你要从(0,0)点走到(n,m), 每次只能往 x 轴或者 y 轴正方向移动一个单位距离。
从(i,j)移动到(i,j+1)的代价为 ri,从(i,j)移动到(i+1,j)的代价为 cj。

求最小代价。

对于 20%的数据, n, m<=5000。
对于 100%的数据, n, m<=10^5,0<ri,ci<=10^8。

思路:杜教原题

• 建出r和c的下凸壳,每次走斜率大的那个。
• 证明?

• P q
• | |
• a--|-----|---
• b--|-----|---
• ra(q-p)+cp(a-b)<=rb(q-p)+cq(a-b)
• (ra-rb)(q-p)<=(cq-cp)(a-b)
• (ra-rb)/(a-b)<=(cq-cp)/(q-p)<=.......(more columns and
rows.
• 斜率?
• 每次走过路径斜率递增--->下凸
• 如何证明在下凸壳上?

下凸壳显然 假设当前是第x1行第y1列,下一个行和列是x2和y2,那么考虑是先沿行走还是先沿列走

先沿行走:r[x1]*(y2-y1)+c[y2]*(x2-x1)

先沿列走:r[x2]*(y2-y1)+c[y1]*(x2-x1)

r[x1]*(y2-y1)+c[y2]*(x2-x1)<r[x2]*(y2-y1)+c[y1]*(x2-x1)

(r[x2]-r[x1])/(x2-x1)>(c[y2]-c[y1])/(y2-y1)

于是先沿斜率大的走

 var x,y:array[..,..]of longint;
q1,q2:array[..]of longint;
r,c:array[..]of int64;
n,m,i,j,l1,l2:longint;
k1,k2:double;
ans:int64; function slope(i,j,k:longint):double;
begin
exit((y[i,k]-y[j,k])/(x[i,k]-x[j,k]));
end; function clac(x1,y1,x2,y2,k:longint):int64;
begin
if k= then exit(r[x1]*(y2-y1)+c[y2]*(x2-x1))
else exit(c[y1]*(x2-x1)+r[x2]*(y2-y1));
end; begin
assign(input,'masodik.in'); reset(input);
assign(output,'masodik.out'); rewrite(output);
readln(n,m);
for i:= to n do
begin
read(y[i,]); x[i,]:=i; r[i]:=y[i,];
end;
for i:= to m do
begin
read(y[i,]); x[i,]:=i; c[i]:=y[i,];
end;
for i:= to n do
begin
while (l1>)and(slope(i,q1[l1],)<=slope(q1[l1-],q1[l1],)) do dec(l1);
inc(l1); q1[l1]:=i;
end;
for i:= to m do
begin
while (l2>)and(slope(i,q2[l2],)<=slope(q2[l2-],q2[l2],)) do dec(l2);
inc(l2); q2[l2]:=i;
end;
i:=; j:=;
while (i<l1)and(j<l2) do
begin
k1:=slope(q1[i],q1[i+],);
k2:=slope(q2[j],q2[j+],);
if k1>k2 then
begin
ans:=ans+clac(q1[i],q2[j],q1[i],q2[j+],);
inc(j);
end
else
begin
ans:=ans+clac(q1[i],q2[j],q1[i+],q2[j],);
inc(i);
end;
end;
while i<l1 do
begin
ans:=ans+clac(q1[i],q2[l2],q1[i+],q2[l2],);
inc(i);
end;
while j<l2 do
begin
ans:=ans+clac(q1[l1],q2[j],q1[l1],q2[j+],);
inc(j);
end;
writeln(ans); close(input);
close(output);
end.

【ZJOI2017 Round1练习&BZOJ5350】D5T1 masodik(DP,斜率优化)的更多相关文章

  1. 【BZOJ-4518】征途 DP + 斜率优化

    4518: [Sdoi2016]征途 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 230  Solved: 156[Submit][Status][ ...

  2. 【BZOJ-3437】小P的牧场 DP + 斜率优化

    3437: 小P的牧场 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 705  Solved: 404[Submit][Status][Discuss ...

  3. 【BZOJ-1010】玩具装箱toy DP + 斜率优化

    1010: [HNOI2008]玩具装箱toy Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 8432  Solved: 3338[Submit][St ...

  4. 【BZOJ】1096: [ZJOI2007]仓库建设(dp+斜率优化)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1096 首先得到dp方程(我竟然自己都每推出了QAQ)$$d[i]=min\{d[j]+cost(j+ ...

  5. BZOJ 1096: [ZJOI2007]仓库建设(DP+斜率优化)

    [ZJOI2007]仓库建设 Description L公司有N个工厂,由高到底分布在一座山上.如图所示,工厂1在山顶,工厂N在山脚.由于这座山处于高原内陆地区(干燥少雨),L公司一般把产品直接堆放在 ...

  6. 学渣乱搞系列之dp斜率优化

    学渣乱搞系列之dp斜率优化 By 狂徒归来 貌似dp的斜率优化一直很难搞啊,尤其是像我这种数学很挫的学渣,压根不懂什么凸包,什么上凸下凸的,哎...说多了都是泪,跟wdd讨论了下,得出一些结论.本文很 ...

  7. DP斜率优化总结

    目录 DP斜率优化总结 任务安排1 任务计划2 任务安排3 百日旅行 DP斜率优化总结 任务安排1 首先引入一道题,先\(O(N^2)\)做法:分别预处理出\(T_i,C_i\)前缀和\(t[i],c ...

  8. HDU 3507 [Print Article]DP斜率优化

    题目大意 给定一个长度为\(n(n \leqslant 500000)\)的数列,将其分割为连续的若干份,使得 $ \sum ((\sum_{i=j}^kC_i) +M) $ 最小.其中\(C_i\) ...

  9. dp斜率优化

    算法-dp斜率优化 前置知识: 凸包 斜率优化很玄学,凭空讲怎么也讲不好,所以放例题. [APIO2014]序列分割 [APIO2014]序列分割 给你一个长度为 \(n\) 的序列 \(a_1,a_ ...

  10. BZOJ 1010: [HNOI2008]玩具装箱toy [DP 斜率优化]

    1010: [HNOI2008]玩具装箱toy Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 9812  Solved: 3978[Submit][St ...

随机推荐

  1. ORA-00845错误原因及解决办法

    故障现象: 用startup命令启动数据库时出现ora-00845错误提示: SQL> startup ORA-00845: MEMORY_TARGET not supported on thi ...

  2. html5的表单元素总结

  3. Java数组的交集、并集

    // 求两个数组的交集 public static int[] SameOfTwoArrays(int[] arr1, int[] arr2) { // 新建一个空数组,用于存储交集,空数组长度应该为 ...

  4. XamarinAndroid 自动绑定View变量

    Android 编程时我们少不了使用FindIdByView函数,在Xamarin Android开发时也需要如此.这个工作很无聊且烦人.在常规Android开发中,人们已经发明了一些方法免除这项工作 ...

  5. 短视频SDK在广电系统的解决方案

    锐动视频编辑SDK集手机视频拍摄和视频剪辑主要功能于一体,同时包含手机端视频配音配乐,字幕特效,滤镜,转场特效等各种功能,全方位满足开发者的需求,并可以快速植入到APP中. 手机端的摄像头录制和直播功 ...

  6. Tinking in Java ---Java的NIO和对象序列化

    前面一篇博客的IO被称为经典IO,因为他们大多数都是从Java1.0开始就有了的:然后今天这篇博客是关于NIO的,所以的NIO其实就是JDK从1.4开始,Java提供的一系列改进的输入/输出处理的新功 ...

  7. Node.js——重定向

  8. html5开发移动混合App系列1-开发环境搭建

    最近公司准备开发门店收银系统,是基于IPAD的程序,决定采用基于 Ionic + Cordova + AngularJS技术混合开发模式. 准备 一台mac(安装了mac os的虚拟机也可以),nod ...

  9. KMP中next数组的理解与应用

    理解 1.next数组一直往前走 next数组一直往前走,得到的所有前缀也是当前主串的后缀,当然了,也是当前主串的前缀. 2.周期性字符串 1.周期性字符串$\Leftrightarrow n \,\ ...

  10. deallocvt - 释放未使用的虚拟终端

    SYNOPSIS(总览) deallocvt [ N1 N2 ... ] DESCRIPTION(描述) 如果不指定参数, deallocvt 程序会释放所有未使用的虚拟终端的核心内存和数据结构. 如 ...