1597: [Usaco2008 Mar]土地购买

Time Limit: 10 Sec  Memory Limit: 162 MB
Submit: 5524  Solved: 2074
[Submit][Status][Discuss]

Description

农夫John准备扩大他的农场,他正在考虑N (1 <= N <= 50,000) 块长方形的土地. 每块土地的长宽满足(1 <= 宽 <
= 1,000,000; 1 <= 长 <= 1,000,000). 每块土地的价格是它的面积,但FJ可以同时购买多快土地. 这些土地的价
格是它们最大的长乘以它们最大的宽, 但是土地的长宽不能交换. 如果FJ买一块3x5的地和一块5x3的地,则他需要
付5x5=25. FJ希望买下所有的土地,但是他发现分组来买这些土地可以节省经费. 他需要你帮助他找到最小的经费.

Input

* 第1行: 一个数: N
* 第2..N+1行: 第i+1行包含两个数,分别为第i块土地的长和宽

Output

* 第一行: 最小的可行费用.

Sample Input

4
100 1
15 15
20 5
1 100
输入解释:
共有4块土地.

Sample Output

500
FJ分3组买这些土地:
第一组:100x1,
第二组1x100,
第三组20x5 和 15x15 plot.
每组的价格分别为100,100,300, 总共500.

HINT

 

Source

Gold

按长从小到大sort 去掉包含关系
那么就可以得到长递增宽递减的长方形序列
b为宽 a为长
dp[i]=dp[j]+(a[i]*b[j+1])

决策单调性很显然 简单的证明一下
设k<j && j的决策比k优
dp[j]+a[i]*b[j+1]<=dp[k]+a[i]*b[k+1]

对于任意t>i a[t]>a[i] 设a[t]=a[i]+v
若要证明决策单调 需证明dp[j]+a[t]*b[j+1]<=dp[k]+a[i]*b[k+1]
把a[t]代入得 dp[j]+a[i]+b[j+1]+v*b[j+1]<=dp[k]+a[i]*b[k+1]+v*b[k+1]
b[j+1]<=b[k+1]所以上式成立
决策具有单调性
证毕

dp[j]+(a[i]*b[j+1])<=dp[k]+(a[i]*b[k+1])

(dp[j]-dp[k])/(b[k+1]-b[j+1])<=a[i]

 #include<cstdio>
#include<algorithm>
#include<queue>
#define ll long long
#define N 500005
using namespace std;
ll dp[N];int q[N];
struct square{ll l,w;bool operator <(const square &b)const{return l==b.l?w<b.w:l<b.l;}}a[N];
ll G(int j,int k){return dp[j]-dp[k];}ll S(int j,int k){return a[k+].w-a[j+].w;}
int main(){
int n;
scanf("%d",&n);
for(int i=;i<=n;i++)scanf("%d%d",&a[i].l,&a[i].w);
int tot=;sort(a+,a++n);
for(int i=;i<=n;i++){
while(tot>&&a[i].w>=a[tot].w)tot--;
a[++tot]=a[i];
}
n=tot;
int t=,h=;
for(int i=;i<=n;i++){
while(h+<t&&G(q[h+],q[h])<=S(q[h+],q[h])*a[i].l)h++;
dp[i]=dp[q[h]]+a[i].l*a[q[h]+].w;
while(h+<t&&G(i,q[t-])*S(q[t-],q[t-])<=G(q[t-],q[t-])*S(i,q[t-]))t--;
q[t++]=i;
}
printf("%lld",dp[n]);
return ;
}

bzoj1597[Usaco2008 Mar]土地购买 斜率优化dp的更多相关文章

  1. bzoj1597 [Usaco2008 Mar]土地购买——斜率优化DP

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1597 就是斜率优化水题... 然而WA了十几遍,正负号处理真让人心累... 还是该负就负,别 ...

  2. BZOJ 1597: [Usaco2008 Mar]土地购买 [斜率优化DP]

    1597: [Usaco2008 Mar]土地购买 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 4026  Solved: 1473[Submit] ...

  3. bzoj 1597 [Usaco2008 Mar]土地购买——斜率优化dp

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1597 又一道斜率优化dp.负数让我混乱.不过仔细想想还是好的. 还可以方便地把那个负号放到x ...

  4. [Bzoj1597][Usaco2008 Mar]土地购买(斜率优化)

    题目链接 因为题目说可以分组,并且是求最值,所以斜率优化应该是可以搞的,现在要想怎么排序使得相邻的数在一个组中最优. 我们按照宽$w$从小到大,高$h$从小到大排序.这时发现可以筛掉一些一定没有贡献的 ...

  5. BZOJ1597: [Usaco2008 Mar]土地购买——斜率优化

    题目大意: 将$n$个长方形分成若干部分,每一部分的花费为部分中长方形的$max_长*max_宽$(不是$max_{长*宽}$),求最小花费 思路: 首先,可以被其他长方形包含的长方形可以删去 然后我 ...

  6. BZOJ 1597: [Usaco2008 Mar]土地购买 斜率优化

    1597: [Usaco2008 Mar]土地购买 Time Limit: 10 Sec  Memory Limit: 162 MB Description 农夫John准备扩大他的农场,他正在考虑N ...

  7. 【斜率DP】bzoj1597: [Usaco2008 Mar]土地购买

    1597: [Usaco2008 Mar]土地购买 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 2474  Solved: 900[Submit][ ...

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

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

  9. 【BZOJ1597】【Usaco2008 Mar】土地购买 斜率优化DP

    题目: 题目在这里 思路与做法: 这题如果想要直接dp的话不太好处理. 不过, 我们发现如果\(a[i].x>=a[j].x\)且\(a[i].y>=a[j].y\) \((\)a是输入的 ...

随机推荐

  1. selenium 爬虫

    from selenium import webdriver import time driver = webdriver.PhantomJS(executable_path="D:/pha ...

  2. Scala Option类型

    转载自: Scala 初学者指南, 这里有一系列很棒的文章 类型 Option 可能你已经见过它在 Map API 中的使用:在实现自己的提取器时,我们也用过它, 然而,它还需要更多的解释. 你可能会 ...

  3. ThinkPad安装deepin操作系统报错解决方法

    目前deepin操作系统,软件也比较多,所以想在自己的thinkpad t430笔记本上安装.但是安装时报错,具体错误忘了看了.反复试了好几次都不行,最后在网上查了,讲bios设置调整之后可以正常安装 ...

  4. ctf变量覆盖漏洞:

    1.变量覆盖: ①:针对extract函数的变量覆盖漏洞: <?php @error_reporting(E_ALL^E_NOTICE); require('config.php'); if($ ...

  5. Python设计TFTP客户端

    #coding=utf-8 from socket import * from threading import Thread import struct def recvData(fileName, ...

  6. 新概念英语(1-11)Is this your shirt ?

    Is this your shirt?Whose shirt is white? A:Whose shirt is that? Is this your shirt, Dave? Dave:No si ...

  7. 浅谈 DML、DDL、DCL的区别

    一.DML DML(data manipulation language)数据操纵语言: 就是我们最经常用到的 SELECT.UPDATE.INSERT.DELETE. 主要用来对数据库的数据进行一些 ...

  8. html标记语言 --图像标记

    html标记语言 --图像标记 三.图像标记 1.使用方法 <img src="路径/文件名.格式" width="属性值" height="属 ...

  9. Linux 定时执行shell脚本命令之crontab

    crontab可以在指定的时间执行一个shell脚本以及执行一系列Linux命令 例如:服务器管理员定时备份数据库数据.日志等 详解: 常用命令: crontab –e //修改 crontab 文件 ...

  10. zookeeper初探

    安装三台linux虚拟机,安装好java环境,并配置好网络以及host文件,分别改好hostname为node0.node1.node2 上传下载好的zookeeper文件到node0的/usr/lo ...