好好的题目连个名字都不统一..

看到这种最大最小的就先排个序嘛= =以x为第一关键字, y为第二关键字排序.

然后有一些\(x_i<=x_{i+1},且y_i<=y_{i+1}\)的土地就完全可以在买\(i+1\)的时候顺便把\(i\)买了.

那么现在就剩下了x递增 y递减的一串. 可以证明一次一起买的应该是连续的一段, 因为中间的y一定比左端点的大, x一定比右端点的小, 那么一定可以在买左右端点的同时把中间的买走.

那就是常见套路了, 方程\(f[i]=f[j]+x[i]*y[\)\(j+1\)\(]\)

然后这个出奇地好化... 都不用数项数怕漏项了...\(f[j]\)=\(-x[i]\)\(*y[i+1]+\)\(f[i]\)...

但是吧, 我们按照这个式子找单调性的时候发现这个斜率总是与凸包的边符号相反, 就会出问题..比如找不到该转移的时候了... 反正我遇到这种情况一脸懵逼... 但是后来想想我tm可能是傻...其实就是= =

我们把方程写成\(f[j]\)=\(x[i]\)\(*(-y[i+1])+\)\(f[i]\)这样不就ok了么= =

然后就变成了一道大水题(然而你不还是去除无用土地的时候去错了么(喂 你不要说出来啊 很丢人的QAQ))此人又日常精分了= =

代码(这次压过行了, 加了个struct和sort反而降到了18行)

#include <cstdio>
#include <algorithm>
const int N=5e4+5;typedef long long LL;
struct lot{int x,y;}l[N];LL f[N]; int q[N],h,t,n,m;
inline bool operator<(const lot&a,const lot&b){return (a.x==b.x)?a.y<b.y:a.x<b.x;}
double slope(int x,int y){return 1.0*(f[x]-f[y])/(l[y+1].y-l[x+1].y);}
inline int gn(int a=0,char c=0){for(;c<'0'||c>'9';c=getchar());
for(;c>47&&c<58;c=getchar())a=a*10+c-48;return a;}
int main(){m=gn();for(int i=1;i<=m;++i) l[i].x=gn(),l[i].y=gn();
std::sort(l+1, l+m+1);
for(int i=1;i<=m;++i){while(n>0&&l[n].y<=l[i].y) --n;l[++n]=l[i];}
for(int i=1;i<=n;++i){
while(h<t&&slope(q[h],q[h+1])<=l[i].x) ++h;
f[i]=f[q[h]]+1LL*l[i].x*l[q[h]+1].y;
while(h<t&&slope(q[t],q[t-1])>=slope(q[t],i)) --t;
q[++t]=i;
} printf("%lld",f[n]);
}

但是这篇好短啊OvO 算了短就短吧~

真实原因: 还有不到15min放学 作为蒟蒻应该A不掉另一道题再把这篇blog搞成二合一于是就这么短放在这儿了. 其实更主要的原因是懒这种事情我怎么会告诉你萌呢~

【笔记篇】斜率优化dp(五) USACO08MAR土地购(征)买(用)Land Acquisition的更多相关文章

  1. 一本通提高篇——斜率优化DP

    斜率优化DP:DP的一种优化形式,主要用于优化如下形式的DP f[i]=f[j]+x[i]*x[j]+... 学习可以参考下面的博客: https://www.cnblogs.com/Xing-Lin ...

  2. 「学习笔记」斜率优化dp

    目录 算法 例题 任务安排 题意 思路 代码 [SDOI2012]任务安排 题意 思路 代码 任务安排 再改 题意 思路 练习题 [HNOI2008]玩具装箱 思路 代码 [APIO2010]特别行动 ...

  3. 学习笔记:斜率优化DP

    作为数学渣,先复习一下已知两点\((x_1, y_1)\), \((x_2, y_2)\),怎么求过两点的一次函数的斜率... 待定系数法代入 \(y = kx + b\) 有: \(x_1k + b ...

  4. hdu3507 斜率优化学习笔记(斜率优化+dp)

    QWQ菜的真实. 首先来看这个题. 很显然能得到一个朴素的\(dp\)柿子 \[dp[i]=max(dp[i],dp[j]+(sum[i]-sum[j])^2) \] 但是因为\(n\le 50000 ...

  5. 【笔记篇】斜率优化dp(一) HNOI2008玩具装箱

    斜率优化dp 本来想直接肝这玩意的结果还是被忽悠着做了两道数论 现在整天浑浑噩噩无心学习甚至都不是太想颓废是不是药丸的表现 各位要知道我就是故意要打删除线并不是因为排版错乱 反正就是一个del标签嘛并 ...

  6. 【学习笔记】动态规划—斜率优化DP(超详细)

    [学习笔记]动态规划-斜率优化DP(超详细) [前言] 第一次写这么长的文章. 写完后感觉对斜优的理解又加深了一些. 斜优通常与决策单调性同时出现.可以说决策单调性是斜率优化的前提. 斜率优化 \(D ...

  7. 2018.09.10 bzoj1597: [Usaco2008 Mar]土地购买(斜率优化dp)

    传送门 终究还是通宵了啊... 这是一道简单的斜率优化dp. 先对所有土地排序,显然如果有严格小于的两块土地不用考虑小的一块. 于是剩下的土地有一条边单增,另外一条单减. 我们假设a[i]是单减的,b ...

  8. BZOJ1597土地购买 【斜率优化DP】

    BZOJ1597土地购买 [斜率优化DP] Description 农夫John准备扩大他的农场,他正在考虑N (1 <= N <= 50,000) 块长方形的土地. 每块土地的长宽满足( ...

  9. 土地购买 (斜率优化dp)

    土地购买 (斜率优化dp) 题目描述 农夫 \(John\) 准备扩大他的农场,他正在考虑$ N(1 \leqslant N \leqslant 50,000)$ 块长方形的土地. 每块土地的长宽满足 ...

随机推荐

  1. .net 委托 +lamda表达式

    1.委托与类同级 想当于定义了一个类型 如 delegate int Sum(int a, int b);// 在声明类之前声明 2.这里可以在类里写个函数 public int sumAB(int ...

  2. 45-Ubuntu-用户管理-10-chmod修改文件|目录权限

    1.将a.py的权限修改为u=rwx, g=r-x, o=r--. 2.将目录test及子目录和文件权限修改为u=rwx, g=rwx, o=r-x.

  3. hdu6396 /// fread()快速读入挂

    题目大意: 给定n k 给定主角具有的k种属性 给定n个怪兽具有的k种属性和打死该怪兽后能得到的k种属性对应增幅 求主角最多能打死多少怪兽和最终主角的k种属性 k最大为5 开5个优先队列贪心 快速读入 ...

  4. C#十六进制值0x12,是一个无效字符 - 程序园

    原文:C#十六进制值0x12,是一个无效字符 - 程序园 我正在加载很多xml文档,其中一些返回错误,如“十六进制值0x12,是无效字符”,并且有不同的字符.如何删除它们?   我在这里做了一个小的研 ...

  5. 一键抓取Android的Locat Log

    很多小伙伴在做App测试时,一遇到Cash,开发同学最常说的一句话,就是抓下Locat日志,很多小伙伴一听到这个抓取日志就会觉得有点烦. ​主要有2点: ​    ​    ​1.是这个bug可能不好 ...

  6. mysql的各种锁简单总结

    表总体上分为三种: 1.表锁 Myisam 开销小,并发低,加锁快,不会出现死锁问题:锁粒度大,发生锁冲突的概率最高. 2.行锁 innodb  开销大,并发高,加锁慢,会出现死锁问题:锁粒度小,发生 ...

  7. 74HC595点亮8个LED灯

    一.原理介绍 595有两个寄存器,都是8位的,如下所示: 595是串入并出带有锁存功能移位寄存器,它的使用方法简单: - -  在正常使用时 /SCLR接高电平,/G接低电平. - -  从SER每输 ...

  8. springboot java.util.NoSuchElementException: No value present 异常处理

    使用jpa查询的时候,如果查询不到数据,就会返回这个错误,下面是处理方法. @Override public User findByEmail(String email) { User user = ...

  9. vue组件添加鼠标滚动事件

    在一个组件标签上加鼠标滚动事件,应该写成    @mousewheel.native

  10. 一起看下Apache1.3.22版本改进和修正了啥?

    Apache 1.3.20 - 1.3.22主要改进: 安全弱点: 1.在Apache1.3.20的win32平台上发现了一个漏洞.如果客户端发送一个非常长的URI可能导致用目录列表来代替缺省主页.4 ...