题解

斜率优化裸题。

有个很玄学的事情,就是我用\(f[i]=min\{f[j-1]+p[j].y*p[i].x\}\) 会很奇怪的Wa 。 明明和\(f[i]=min\{f[j]+p[j+1].y*p[i].x\}\)一模一样的呀!

如果有dalao愿意帮忙看一下就感激不尽了。

附上正确代码和错误代码

正确代码:

#include<bits/stdc++.h>
typedef long long ll;
using namespace std; const int maxn = 5e4+10;
const ll inf = 10000000000000LL;
struct qwq{
ll x,y;
const bool operator < (const qwq rhs) const {
if(this->x==rhs.x)
return this->y<rhs.y;
return this->x<rhs.x;
}
} tmp[maxn],p[maxn];
ll f[maxn];
int tot=0,n,q[maxn],l,r;
long double slope(int a,int b) {
long double tmp1 = f[b]-f[a],tmp2 = -p[b+1].y+p[a+1].y;
return tmp1/tmp2;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
cin>>n;
for(int i = 1;i<=n;++i)
cin>>tmp[i].x>>tmp[i].y;
sort(tmp+1,tmp+1+n);
ll mxy=0;
for(int i = n;i;--i) {
if(tmp[i].y>mxy) {
mxy=tmp[i].y;
p[++tot]=tmp[i];
}
}
reverse(p+1,p+1+tot);
#ifdef force
for(int i = 1;i<=tot;++i) {
f[i]=inf;
for(int j = 0;j<i;++j) {
f[i]=min(f[i],f[j]+p[j+1].y*p[i].x);
}
}
#endif
#ifndef force
for(int i = 1;i<=tot;++i) {
while(l<r&&slope(q[l],q[l+1])<=p[i].x) ++l;
int j = q[l];
f[i]=f[j]+p[j+1].y*p[i].x;
while(l<r&&slope(q[r-1],q[r])>=slope(q[r],i)) --r;
q[++r]=i;
}
#endif
cout<<f[tot]<<endl;
return 0;
}

错误代码

#include<bits/stdc++.h>
typedef long long ll;
using namespace std; const int maxn = 5e4+10;
const ll inf = 10000000000000LL;
double esp = 1e-6;
struct qwq{
ll x,y;
const bool operator < (const qwq rhs) const {
if(this->x==rhs.x)
return this->y<rhs.y;
return this->x<rhs.x;
}
} tmp[maxn],p[maxn];
ll f[maxn];
int tot=0,n,q[maxn],l,r;
double slope(int a,int b) {
double tmp1 = f[b-1]-f[a-1],tmp2 = -p[b].y+p[a].y;
return tmp1/tmp2;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
cin>>n;
for(int i = 1;i<=n;++i)
cin>>tmp[i].x>>tmp[i].y;
sort(tmp+1,tmp+1+n);
ll mxy=0;
for(int i = n;i;--i) {
if(tmp[i].y>mxy) {
mxy=tmp[i].y;
p[++tot]=tmp[i];
}
}
reverse(p+1,p+1+tot);
#ifdef force
for(int i = 1;i<=tot;++i) {
f[i]=inf;
for(int j = 1;j<=i;++j) {
f[i]=min(f[i],f[j-1]+p[j].y*p[i].x);
}
}
#endif
#ifndef force
l=r=1;
q[1]=1;
for(int i = 1;i<=tot;++i) {
while(l<r&&slope(q[l],q[l+1])<=p[i].x) ++l;
int j = q[l];
f[i]=f[j-1]+p[j].y*p[i].x;
while(l<r&&slope(q[r-1],q[r])>=slope(q[r],i)) --r;
q[++r]=i+1;
}
#endif
cout<<f[tot]<<endl;
return 0;
}

【文文殿下】 [USACO08MAR]土地征用 题解的更多相关文章

  1. 洛谷 P2900 [USACO08MAR]土地征用Land Acquisition 解题报告

    P2900 [USACO08MAR]土地征用Land Acquisition 题目描述 约翰准备扩大他的农场,眼前他正在考虑购买N块长方形的土地.如果约翰单买一块土 地,价格就是土地的面积.但他可以选 ...

  2. 【文文殿下】 [SDOI2013]保护出题人 题解

    题解 我们把伤害-时间图像画出来.然后维护一下僵尸血量的前缀和.最好情况肯定是有一个僵尸恰好死在戴夫家门口.我们把原点到其他n个点的斜率最大的一个累积到答案. 发现每添加一个点,其他所有点的坐标都变了 ...

  3. 【文文殿下】[CEOI2004]锯木厂选址 题解

    题解 我们枚举建厂的位置,发现有个\(n^2\)的DP.随手搞个斜率优化到\(O(n)\). #include<bits/stdc++.h> using namespace std; ty ...

  4. 【文文殿下】CF1098C Construct a tree 题解

    题解 挺水的一道题. Rating $ \color{orange} {2300}$ 以下送命题. 首先我们知道,所有子树大小之和就是节点个数加上从根到所有节点的路径长度之和. 他要求度数尽可能小,所 ...

  5. 【文文殿下】[APIO2010]特别行动队 题解

    基本上是一个斜率优化裸题了 #include<bits/stdc++.h> using namespace std; typedef long long ll; const int max ...

  6. 【文文殿下】【CF724C】Ray Tracing (中国剩余定理)

    题解 我们考虑将棋盘扩大一倍,这样相当于取膜.然后,我们只要对x,y,的位置分类讨论,做四次crt就行.具体细节看文文代码. #include<cstdio> #include<al ...

  7. 【文文殿下】CF1029F Multicolored Markers

    这道题考场上卡了文文相当长的时间,所以写个题解泄泄愤QAQ 题意:给你$a$块红瓷砖,$b$块白瓷砖,在一个无限大的地上拼装,要求整体是一个矩形,并且至少有一种颜色是一个矩形,求最小周长. 题解: 首 ...

  8. 洛谷P2900 [USACO08MAR]土地征用Land Acquisition(动态规划,斜率优化,决策单调性,线性规划,单调队列)

    洛谷题目传送门 用两种不一样的思路立体地理解斜率优化,你值得拥有. 题意分析 既然所有的土地都要买,那么我们可以考虑到,如果一块土地的宽和高(其实是蒟蒻把长方形立在了平面上)都比另一块要小,那么肯定是 ...

  9. 【文文殿下】WC2019游记

    Day0 今天早上三点半才睡着,五点起床,前往省城郑州.与省实验常老师汇合,坐上高铁,下午三点半多才到广州二中. 下午随便找了一个教室进去敲一敲代码,发现自己越来越菜了. 和一大堆网上的dalao面基 ...

随机推荐

  1. flask框架基础

    一 web的一些框架介绍 Flask:短小精悍,内部没有包含多少组件,但是第三方的组件是非常丰富的. Django:django是一个重武器,内部包含了非常多的组件:orm,form,modelFor ...

  2. idea创建spring boot+mybatis(oracle)+themeleaf项目

    1.新建项目 选择idea已经有的spring initializr next,然后填写项目命名,包名 然后next,选择所需要的依赖 然后一路next,finish,项目新建成功,然后可以删除下面的 ...

  3. 2018.11.05 bzoj3124: [Sdoi2013]直径(树形dp)

    传送门 一道sbsbsb树形dpdpdp 第一问直接求树的直径. 考虑第二问问的边肯定在同一条直径上均是连续的. 因此我们将直径记下来. 然后对于直径上的每一个点,dpdpdp出以这个点为根的子树中不 ...

  4. mysql-libs版本冲突卸载不了

    问题: 卸载mysql-libs时候出现如下依赖性无法卸载 [root@mail yum.repos.d]# rpm -e mysql-libserror: Failed dependencies: ...

  5. idea中Eclipse Code Formatter插件设置和使用,以及注释模板的修改

    在settings里面找到plugins这个选项,搜索Eclipse Code Formatter,点击安装,重启idea即可进行配置: 首先,先安装Eclipse Code Formatter插件: ...

  6. 以太网MAC地址规范

    原文地址:http://blog.csdn.net/skyflying2012/article/details/40322563 之前一段时间在做网卡驱动的工作,现在产品量产,利用ifconfig e ...

  7. typecho开启pjax,ajax,无刷新

    1.引入jquery和pjax 检查你的网站是否引入1.7.0版本以上的jquery.js,如果没有请全局引入 https://files.cnblogs.com/files/fan-bk/pjax. ...

  8. keepalive主从上同时出现VIP,且均无法消失

    低版本bug 双主架构中,keepalived日志出现: more /var/log/messageOct 9 03:16:22 mysql-dzg-60-148 Keepalived_vrrp[85 ...

  9. asp.net DataReader DataTable 使用反射给给实体赋值

    asp.net 使用反射给给实体赋值 实体类继承此基类 using System.Reflection; using System.Data.SqlClient; using System.Data; ...

  10. LoadIcon

    1.LoadIcon(HINSTANCE hInstance,LPCSTR lpIconName);该函数从与 hInstance 模块相关联的可执行文件中装入lpIconName指定的图标资源,仅当 ...