Solution:
- 线性DP打牌\(+\)斜率优化
- 定义状态:\(dp[i]\)到了位置\(i\)最少花费
- 首先我们要发现,如果有一个小方块能被其他的大方块包围,其实可以忽略这个小方块,因为我们可以把他们俩捆绑,小方块的边长不会对求值造成贡献
- 然后我们可以按照宽从大到小排序,长从小到大(剔除了那种包含的情况),保证单调性
- 我们就可以列出递推式子:\(dp[i]=min(dp[j-1]+y[j]*x[i])\)
注意是\(dp[j-1]\)(这里搞错了好久)
- 显然这个是满足决策单调性的嘛(主要是我不会证明)
- 然后我们就可玩弄这个式子,假定\(j<k\),那么\(y[j]>y[k]\),\(dp[j-1]<dp[k-1]\),且\(x[i]\)单调增
\]
\]
\]
- 然后维护一个上凸包就ok了
Code:
//It is coded by Ning_Mew on 5.22
#include<bits/stdc++.h>
#define LL long long
using namespace std;
const int maxn=5e5+7;
int n;
struct Node{
LL x,y;
}node[maxn];
LL dp[maxn],large=-10000;
int team[maxn],s=0,t=1;
LL Min(LL a,LL b){return a<b?a:b;}
bool cmp(const Node &a,const Node &b){
if(a.y!=b.y)return a.y>b.y;return a.x>b.x;
}
double slope(int i,int j){
return 1.0*(dp[i-1]-dp[j-1])/(node[i].y-node[j].y);
}
int main(){
freopen("in.in","r",stdin);
scanf("%d",&n);
for(int i=1;i<=n;i++){scanf("%lld%lld",&node[i].x,&node[i].y);}
sort(node+1,node+n+1,cmp);
s=1;t=2;team[s]=1;
dp[1]=node[1].x*node[1].y;
large=node[1].x;
for(int i=2;i<=n;i++){
if(node[i].x<=large){dp[i]=dp[i-1];continue;}
large=max(large,node[i].x);
while((s+1<t)&&(slope(team[s],team[s+1])>-1.0*node[i].x)){
s++;
}
dp[i]=Min(node[i].x*node[i].y+dp[i-1],dp[ team[s]-1 ]+node[ team[s] ].y*node[i].x);
while((s+1<t)&&(slope(team[t-1],i)>slope(team[t-2],team[t-1]))){t--;}
team[t]=i;t++;
}
printf("%lld\n",dp[n]);
return 0;
}
【题解】 bzoj1597: [Usaco2008 Mar]土地购买 (动态规划+斜率优化)的更多相关文章
-
[bzoj1597][usaco2008 mar]土地购买 (动态规划+斜率优化)
Description 农夫John准备扩大他的农场,他正在考虑N (1 <= N <= 50,000) 块长方形的土地. 每块土地的长宽满足(1 <= 宽 <= 1,000, ...
-
[BZOJ1597][Usaco2008 Mar]土地购买(斜率优化)
Description 农夫John准备扩大他的农场,他正在考虑N (1 <= N <= 50,000) 块长方形的土地. 每块土地的长宽满足(1 <= 宽 <= 1,000, ...
-
2018.09.10 bzoj1597: [Usaco2008 Mar]土地购买(斜率优化dp)
传送门 终究还是通宵了啊... 这是一道简单的斜率优化dp. 先对所有土地排序,显然如果有严格小于的两块土地不用考虑小的一块. 于是剩下的土地有一条边单增,另外一条单减. 我们假设a[i]是单减的,b ...
-
BZOJ1597: [Usaco2008 Mar]土地购买(dp 斜率优化)
题意 题目链接 Sol 重新看了一遍斜率优化,感觉又有了一些新的认识. 首先把土地按照\((w, h)\)排序,用单调栈处理出每个位置第向左第一个比他大的位置,显然这中间的元素是没用的 设\(f[i] ...
-
bzoj1597: [Usaco2008 Mar]土地购买 dp斜率优化
东风吹战鼓擂第一题土地购买送温暖 ★★★ 输入文件:acquire.in 输出文件:acquire.out 简单对比时间限制:1 s 内存限制:128 MB 农夫John准备扩大他的农 ...
-
BZOJ 1597: [Usaco2008 Mar]土地购买 动态规划 + 斜率优化
Code: #include<bits/stdc++.h> #define maxn 1000000 #define ll long long #define x(i) (b[i+1]) ...
-
1597: [Usaco2008 Mar]土地购买 [ dp+斜率优化 ] 未完
传送门 1597: [Usaco2008 Mar]土地购买 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1979 Solved: 705[Subm ...
-
【BZOJ 1597】 [Usaco2008 Mar]土地购买 (斜率优化)
1597: [Usaco2008 Mar]土地购买 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 3601 Solved: 1322 Descrip ...
-
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] ...
随机推荐
-
如何用TypeScript开发微信小程序
微信小程序来了!这个号称干掉传统app的玩意儿虽然目前处于内测阶段,不过目前在应用号的官方文档里已经放出了没有内测号也能使用的模拟器了. 工具和文档可以参考官方文档:https://mp.weixin ...
-
总结PowerShell的常用命令
命令1: #连接Azure订阅账户 Add-AzureAccount #获取所有在连接着的Azure订阅 Get-AzureAcount Get-AzureSubscription #设置当前的Azu ...
-
OpenGl从零开始之坐标变换
http://www.tuicool.com/articles/uiayYrI OpenGL学习脚印: 坐标变换过程(vertex transformation) http://blog.csdn.n ...
-
Linux下aMule安装教程
Linux下载神器aMule安装教程 aMule可以说是Linux下的电驴,你们说eMule是不是就是aMule的Windows版呢?也是开源的. Fedora安装aMule很简单,两条命令就搞定. ...
-
typedef和#define的简单比较
1.通常说typedef比#define要好,尤其在有指针的情况下 typedef char* pStr1; #define pStr2 char* pStr1 s1,s2; pStr2 s3,s4; ...
-
linux下自动加载设备驱动程序模块
假设你的设备驱动程序为:yourdrivername.ko 1 cp yourdrivername.ko /lib/modules/"version"/kernel/driver ...
-
[EXP]Microsoft Windows 10 (Build 17134) - Local Privilege Escalation (UAC Bypass)
#include "stdafx.h" #include <Windows.h> #include "resource.h" void DropRe ...
-
mssqlserver的md5函数
参考:https://www.cnblogs.com/JuneZhang/p/6396896.html?utm_source=itdadao&utm_medium=referral 简单说明: ...
-
【LeetCode】93. Restore IP Addresses
Restore IP Addresses Given a string containing only digits, restore it by returning all possible val ...
-
SpringBoot整合MyBatis及Thymeleaf
http://www.cnblogs.com/ludashi/archive/2017/05/08/6669133.html 上篇博客我们聊了<JavaEE开发之SpringBoot工程的创建. ...