题意:你要从(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. [转]如何在 TFS 中使用 Git

    本文转自 http://www.cnblogs.com/stg609/p/3651688.html 对 Charley Blog 的代码进行版本控制的想法由来已久,在代码建立之初其实已经使用过 TFS ...

  2. WPF 实时绘图的逻辑

    实时绘图实际上是两个线程.外部线程直接用thread,只有到绘图那个逻辑才用绘图控件的mycanvas2.Dispatcher.Invoke. 或者说,INVOKE并不是开线程,只是一个绘图的委托而已 ...

  3. greenplum4.3.8.2安装

    GREENPLUM总体结构:   数据库由Master Severs和Segment Severs通过Interconnect互联组成. Master主机负责:建立与客户端的连接和管理:SQL的解析并 ...

  4. sh NonUniqueObjectException

    话题引入: 使用hibernate进行更新操作时,首先调用了findById方法获取要修改的对象,此时session没有被关闭,接着重新创建一个对象,将要修改的属性值赋值给这个对象.调用修改方法抛出如 ...

  5. windows远程桌面链接“发生身份验证错误。要求的函数不受支持”

    解决办法: 开始菜单->运行gpedit.msc  打开配置项:计算机配置>管理模板>系统>凭据分配>加密Oracle修正 选择启用并选择易受攻击,配置保存后即可解决问题 ...

  6. oracle分配权限 学习笔记--转载

    在全局数据库ORCL下创建一个用户首先在开始-->运行——>sqlplus,然后输入 sys/change_on_install as sysdba 以sys权限登陆进去 然后可以进行操作 ...

  7. UIWebView中javascript与Objective-C交互、获取摄像头

    UIWebView是iOS开发中常用的一个视图控件,多数情况下,它被用来显示HTML格式的内容. 支持的文档格式 除了HTML以外,UIWebView还支持iWork, Office等文档格式: Ex ...

  8. Web项目ConcurrentModificationException异常

    后台SSH在做Session删除的时候,遇到了ConcurrentModificationException异常. 参考资料:http://blog.csdn.net/idesvo/article/d ...

  9. 启发式合并CSU - 1811

    F - Tree Intersection CSU - 1811 Bobo has a tree with n vertices numbered by 1,2,…,n and (n-1) edges ...

  10. linux系统查看网络连接情况

    netstat命令状态说明: CLOSED                      没有使用这个套接字[netstat 无法显示closed状态] LISTEN 套接字正在监听连接[调用listen ...