【题解】 bzoj1597: [Usaco2008 Mar]土地购买 (动态规划+斜率优化)
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] ...
随机推荐
- word导入导出自定义属性列表
Sub ExportCustom() ' ' ExportCustom 宏 ' 导出自定义属性到custom.txt ' Dim lFileNumber As Long Dim sFilePath A ...
- struts2_maven_learning
以下为学习maven struts2 的学习过程,现记录如下. 1.创建一个完善的maven程序 maven:(jar) 1)maven project 2)facet 3)pom.xml,depen ...
- MSTECHLNK
MSTECHLNK(微软技术直通车) 时间:2017.12.16地点:微软中关村办公楼天安门会议室
- spring配置多个事务管理器
<tx:annotation-driven/> <bean id="transactionManager1" class="org.springfram ...
- WinDbg命令三部曲
WinDbg 命令三部曲:(一)WinDbg 命令手册 WinDbg 命令三部曲:(二)WinDbg SOS 扩展命令手册 WinDbg 命令三部曲:(三)WinDbg SOSEX 扩展命令手册
- Android环境下使用call_usermodehelper()以及调试
有时候设备驱动需要做一些与其他的设备通信的操作,但是驱动本身又不可以去实作,那这个时候就可以通过调用用户态的软件,通过这个软件和其他的设备进行通信. 那在内核态如何去调用用户态的程序呢?call_us ...
- SQL Server Integration Services的10大最佳实践
原文出处:https://blogs.msdn.microsoft.com/sqlcat/2013/09/16/top-10-sql-server-integration-services-best- ...
- rabbitMQ教程(四) spring整合rabbitMQ代码实例
一.开启rabbitMQ服务,导入MQ jar包和gson jar包(MQ默认的是jackson,但是效率不如Gson,所以我们用gson) 二.发送端配置,在spring配置文件中配置 <?x ...
- Asp.Net_<asp:RadioButtonList
<asp:RadioButtonList runat="server" ID="RadioButtonList1" RepeatDirection ...
- strongSwan配置、运行及测试
版本信息:strongSwan v5.7.2 1. 编译 tar xvf strongswan-5.7.2.tar.gz ./configure --prefix=/usr/ --sysco ...