[BZOJ 1597][USACO 2008 Mar]土地购买(DP+斜率优化)
来源:互联网 发布:数据恢复 坑人 编辑:程序博客网 时间:2024/06/08 22:14
题目链接
http://www.lydsy.com/JudgeOnline/problem.php?id=1597
思路
首先对所有的矩形按照第一关键字长度升序,第二关键字宽度升序排序,然后贪心地将每个会被其他矩形完全覆盖住的矩形全部删去。显然此时所有的矩形是按照长度升序,按照宽度降序排列的。为什么呢?假如有两个矩形
因此我们可以想到一个DP的做法,用
这个DP是
假设当前要DP求出
这样我们只需要维护一个单调队列,并且队列中相邻两个状态对应的两个点的
代码
#include <iostream>#include <stdio.h>#include <stdlib.h>#include <string.h>#include <algorithm>#define MAXN 51000using namespace std;typedef long long int LL;int n;struct Square{ LL l,h;}sqr[MAXN],stack[MAXN];int top=0;bool cmp(Square a,Square b){ if(a.l==b.l) return a.h<b.h; return a.l<b.l;}LL f[MAXN];int q[MAXN],h=1,t=1;LL fracup(int a,int b){ return f[b]-f[a];}LL fracdn(int a,int b){ return sqr[a+1].h-sqr[b+1].h;}int main(){ scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%lld%lld",&sqr[i].l,&sqr[i].h); sort(sqr+1,sqr+n+1,cmp); for(int i=1;i<=n;i++) { while(top>0&&sqr[i].h>=stack[top].h) top--; stack[++top]=sqr[i]; } q[t++]=0; for(int i=1;i<=top;i++) sqr[i]=stack[i]; for(int i=1;i<=top;i++) { while(h+1<t&&fracup(q[h],q[h+1])<=sqr[i].l*fracdn(q[h],q[h+1])) h++; f[i]=f[q[h]]+sqr[q[h]+1].h*sqr[i].l; while(h+1<t&&fracup(q[t-1],i)*fracdn(q[t-2],q[t-1])<fracup(q[t-2],q[t-1])*fracdn(q[t-1],i)) t--; q[t++]=i; } printf("%lld\n",f[top]); return 0;}
1 0
- BZOJ 1597 Usaco 2008 Mar 土地购买 斜率优化DP
- [BZOJ 1597][USACO 2008 Mar]土地购买(DP+斜率优化)
- [BZOJ 1597] Usaco2008 Mar 土地购买 · 斜率优化DP
- [BZOJ 1597][Usaco2008 Mar]土地购买:DP斜率优化
- [斜率DP优化]BZOJ 1597: [Usaco2008 Mar]土地购买 题解
- 【BZOJ 3636】[Usaco2008 Mar]土地购买 斜率优化dp
- 【斜率优化dp】bzoj 1597 土地购买
- 【斜率DP】【bzoj 1597】: [Usaco2008 Mar]土地购买
- bzoj 1597: [Usaco2008 Mar]土地购买(斜率优化)
- BZOJ 1597:[Usaco2008 Mar]土地购买(斜率优化)
- BZOJ 1597: [Usaco2008 Mar]土地购买【斜率优化】
- BZOJ 1597 [Usaco2008 Mar]土地购买 动态规划+斜率优化
- bzoj 1597: [Usaco2008 Mar]土地购买(斜率优化dp 例题)
- 1597: [Usaco2008 Mar]土地购买 斜率优化dp
- 1597: [Usaco2008 Mar]土地购买 斜率优化dp
- 1597: [Usaco2008 Mar]土地购买 斜率优化
- bzoj 1597 土地购买(斜率优化dp)
- 【BZOJ】1597 [Usaco2008 Mar]土地购买 DP
- Java字节码简单介绍
- IOS中进行内购时需要登陆两次账号的问题
- Vim自动补全神器:YouCompleteMe+Syntastic
- final关键字
- 学习资料
- [BZOJ 1597][USACO 2008 Mar]土地购买(DP+斜率优化)
- sscanf函数的用法
- 动态规划(三)背包问题
- 北大ACM2139——Six Degrees of Cowvin Bacon
- 【Algorithm】最大连续子数组和
- iOS开发中常用的优秀第三方框架
- 卫语句
- 【字符编码系列之五】Unicode实现之UTF-16详解
- HDOJ 题目2303 The Embarrassed Cryptographer(数学)