BZOJ 1597 [Usaco2008 Mar]土地购买:斜率优化dp
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1597
题意:
有n块矩形土地,长为a[i],宽为b[i]。
FJ想要将这n块土地全部买下来。
土地可以分组购买。
若有某一些土地被分到了一组,则将这一组土地全部买下的花费为他们的max(a[i])*max(b[i])。
问你最小总花费是多少。
题解:
首先,如果一块土地能够被另一块土地完全包含(即长宽都比另一个小),那么被包含的那块土地可以忽略不计。
然后贪心地考虑如何使花费最小:
如果要使花费尽可能小,则分在同一组中矩形的长宽差距应尽可能地小。
所以将长a[i]作为第一关键字,将宽b[i]作为第二关键字排序。
此时矩形的长a[i]一定是非降的,那么对于两个矩形i和j(i<j),如果有b[i]<=b[j],则j一定能完全包含i。
利用这一特性将所有能被包含的矩形去掉。
此时矩形的宽b[i]就变成了严格递减的了。
显然,此时分到一组中的矩形必须是连续的一段区间,才有可能最优。
然后就可以dp了。
表示状态:
dp[i]表示已经购买了前i块土地的最小花费。
找出答案:
假设去掉能被包含的矩形之后,矩形总数为tot。
ans = dp[tot]
如何转移:
dp[i] = min dp[j] + a[i]*b[j+1]
边界条件:
dp[0] = 0
斜率优化:
设j < k,且k的决策更优。
则:dp[j] + a[i]*b[j+1] > dp[k] + a[i]*b[k+1]
整理得:(dp[k]-dp[j])/(b[j+1]-b[k+1]) < a[i]
所以slope(i,j) = (dp[i]-dp[j])/(b[j+1]-b[i+1])
由于a[i]非降,所以用单调队列维护下凸壳即可。
AC Code:
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <algorithm>
#define MAX_N 50005 using namespace std; struct Rect
{
long long a,b;
Rect(long long _a,long long _b)
{
a=_a; b=_b;
}
Rect(){}
friend bool operator < (const Rect &x,const Rect &y)
{
return x.a!=y.a ? x.a<y.a : x.b<y.b;
}
}; int n;
int q[MAX_N];
long long dp[MAX_N];
Rect x[MAX_N]; void read()
{
cin>>n;
for(int i=;i<=n;i++)
{
cin>>x[i].a>>x[i].b;
}
} inline double slope(int i,int j)
{
return (double)(dp[i]-dp[j])/(x[j+].b-x[i+].b);
} void work()
{
sort(x+,x++n);
int tot=;
for(int i=;i<=n;i++)
{
while(tot && x[i].b>=x[tot].b) tot--;
x[++tot]=x[i];
}
x[tot+]=Rect(,);
int l=,r=;
q[]=,dp[]=;
for(int i=;i<=tot;i++)
{
while(l<r && slope(q[l],q[l+])<=x[i].a) l++;
dp[i]=dp[q[l]]+x[i].a*x[q[l]+].b;
while(l<r && slope(q[r],i)<slope(q[r-],q[r])) r--;
q[++r]=i;
}
cout<<dp[tot]<<endl;
} int main()
{
read();
work();
}
BZOJ 1597 [Usaco2008 Mar]土地购买:斜率优化dp的更多相关文章
- BZOJ 1597: [Usaco2008 Mar]土地购买 [斜率优化DP]
1597: [Usaco2008 Mar]土地购买 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 4026 Solved: 1473[Submit] ...
- bzoj 1597 [Usaco2008 Mar]土地购买——斜率优化dp
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1597 又一道斜率优化dp.负数让我混乱.不过仔细想想还是好的. 还可以方便地把那个负号放到x ...
- BZOJ 1597: [Usaco2008 Mar]土地购买 斜率优化
1597: [Usaco2008 Mar]土地购买 Time Limit: 10 Sec Memory Limit: 162 MB Description 农夫John准备扩大他的农场,他正在考虑N ...
- bzoj1597[Usaco2008 Mar]土地购买 斜率优化dp
1597: [Usaco2008 Mar]土地购买 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 5524 Solved: 2074[Submit] ...
- bzoj1597 [Usaco2008 Mar]土地购买——斜率优化DP
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1597 就是斜率优化水题... 然而WA了十几遍,正负号处理真让人心累... 还是该负就负,别 ...
- BZOJ 1597: [Usaco2008 Mar]土地购买( dp + 斜率优化 )
既然每块都要买, 那么一块土地被另一块包含就可以不考虑. 先按长排序, 去掉不考虑的土地, 剩下的土地长x递增, 宽y递减 dp(v) = min{ dp(p)+xv*yp+1 } 假设dp(v)由i ...
- BZOJ 1597: [Usaco2008 Mar]土地购买【斜率优化+凸包维护】
1597: [Usaco2008 Mar]土地购买 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 4989 Solved: 1847[Submit] ...
- 斜率优化专题1——bzoj 1597 [Usaco2008 Mar] 土地购买 题解
转载请注明:http://blog.csdn.net/jiangshibiao/article/details/24387147 [原题] 1597: [Usaco2008 Mar]土地购买 Time ...
- bzoj 1597: [Usaco2008 Mar]土地购买【斜率优化】
按xy降序排序,把能被完全包含的去掉 然后就得到了x升序y降序的一个数组 然后方程就显然了:f[i]=min(f[j]+y[j+1]x[i]) 斜率优化转移 说起来我还不会斜率优化呢是不是该学一下了 ...
随机推荐
- 红米手机连接logcat,调试信息刷屏解决办法
我买了红米,平时拿它来当作安卓测试机的 可是把它接入eclipse里面,发现它会往logcat打印大量的日志,我自己想调试一个程序的时候,自己的程序的日志一会儿就被冲刷没了 新建一个logcat me ...
- 动态注册HttpModule管道,实现global.asax功能
1.所用类库有 Microsoft.Web.Infrastructure.dll 和WebActivator.dll 2.类代码如下 using System; using System.Collec ...
- C++ Primer(第五版)读书笔记 & 习题解答 --- Chapter 1
Chapter 1.1 1. 每个C++程序都必须有且只能有一个main函数,main函数的返回类型必须是int.操作系统通过调用main函数来运行C++程序. 2. 一个函数的定义包含四部分:返回类 ...
- spring download
http://maven.springframework.org/release/org/springframework/spring/
- eclipse配置python插件
eclipse配置python主要可以分为以下几个步骤完成: 1. 安装python,python主要有两个版本,python2和python3,这里安装的是python2.7.主要考虑python使 ...
- Hadoop环境搭建1_JDK+SSH
1 前言: Hadoop 最早是为了在Linux 平台上使用而开发的,但是Hadoop 在UNIX.Windows 和Mac OS X 系统上也运行良好.不过,在Windows 上运行Hadoop 稍 ...
- Ubuntu下VirtualBox虚拟机与主机机互相ping通的简单配置心得
virtualbox 是个非常优秀的软件,通常与主机之间有3种方式,Bridged方式,NAT方式,host-only方式,安装的默认方式是NAT,可是这样的方式在virtualbox虚拟机下有个缺点 ...
- WPF编程学习——样式(好文)
http://www.cnblogs.com/libaoheng/archive/2011/11/20/2255963.html
- jquery 使用笔记
一下是在做项目中用到jquery涉及到的一些知识点,把源码复制过来,省得以后忘记了: <link href="<%=request.getContextPath()%>/c ...
- 虚拟化构建二分图(BZOJ2080 题解+浅谈几道双栈排序思想的题)
虚拟化构建二分图 ------BZOJ2080 题解+浅谈几道双栈排序思想的题 本题的题解在最下面↓↓↓ 不得不说,第一次接触类似于双栈排序的这种题,是在BZOJ的五月月赛上. [BZOJ4881][ ...