【文文殿下】 [USACO08MAR]土地征用 题解
题解
斜率优化裸题。
有个很玄学的事情,就是我用\(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]土地征用 题解的更多相关文章
- 洛谷 P2900 [USACO08MAR]土地征用Land Acquisition 解题报告
P2900 [USACO08MAR]土地征用Land Acquisition 题目描述 约翰准备扩大他的农场,眼前他正在考虑购买N块长方形的土地.如果约翰单买一块土 地,价格就是土地的面积.但他可以选 ...
- 【文文殿下】 [SDOI2013]保护出题人 题解
题解 我们把伤害-时间图像画出来.然后维护一下僵尸血量的前缀和.最好情况肯定是有一个僵尸恰好死在戴夫家门口.我们把原点到其他n个点的斜率最大的一个累积到答案. 发现每添加一个点,其他所有点的坐标都变了 ...
- 【文文殿下】[CEOI2004]锯木厂选址 题解
题解 我们枚举建厂的位置,发现有个\(n^2\)的DP.随手搞个斜率优化到\(O(n)\). #include<bits/stdc++.h> using namespace std; ty ...
- 【文文殿下】CF1098C Construct a tree 题解
题解 挺水的一道题. Rating $ \color{orange} {2300}$ 以下送命题. 首先我们知道,所有子树大小之和就是节点个数加上从根到所有节点的路径长度之和. 他要求度数尽可能小,所 ...
- 【文文殿下】[APIO2010]特别行动队 题解
基本上是一个斜率优化裸题了 #include<bits/stdc++.h> using namespace std; typedef long long ll; const int max ...
- 【文文殿下】【CF724C】Ray Tracing (中国剩余定理)
题解 我们考虑将棋盘扩大一倍,这样相当于取膜.然后,我们只要对x,y,的位置分类讨论,做四次crt就行.具体细节看文文代码. #include<cstdio> #include<al ...
- 【文文殿下】CF1029F Multicolored Markers
这道题考场上卡了文文相当长的时间,所以写个题解泄泄愤QAQ 题意:给你$a$块红瓷砖,$b$块白瓷砖,在一个无限大的地上拼装,要求整体是一个矩形,并且至少有一种颜色是一个矩形,求最小周长. 题解: 首 ...
- 洛谷P2900 [USACO08MAR]土地征用Land Acquisition(动态规划,斜率优化,决策单调性,线性规划,单调队列)
洛谷题目传送门 用两种不一样的思路立体地理解斜率优化,你值得拥有. 题意分析 既然所有的土地都要买,那么我们可以考虑到,如果一块土地的宽和高(其实是蒟蒻把长方形立在了平面上)都比另一块要小,那么肯定是 ...
- 【文文殿下】WC2019游记
Day0 今天早上三点半才睡着,五点起床,前往省城郑州.与省实验常老师汇合,坐上高铁,下午三点半多才到广州二中. 下午随便找了一个教室进去敲一敲代码,发现自己越来越菜了. 和一大堆网上的dalao面基 ...
随机推荐
- 【Web】Nginx配置规则
Nginx配置基本说明 以下是nginx的基本配置文件如下(编辑命令:vi /usr/local/nginx/conf/nginx.conf): #user nobody; #nginx进程数,建议设 ...
- NOIP水题测试(2017082501)
日常水题测试又来了! 以后答案都以单题形式公布. 下面看今天的水题: 时间限制:5小时 题目一:无法形容的水 题目二:比上一题还水 题目三:一元三次方程求解 题目四:单词接龙 题目五:统计单词个数 题 ...
- mysql中的handler_read_%
mysql> show status like 'handler_read_%'; +-----------------------+-------+ | Variable_name | Val ...
- java学习第六周
这是暑假学习的第六周,在这周我练习了老师给的例题,还是有一些地方看不懂,这周我对那些不懂的地方用看视频来进行解答,以及进行第二次复习. 下周我会对Java进行更加详细的复习,做好笔记,在LeetCod ...
- centos7 hive + 远程mysql 搭建笔记
1.require:java环境,本地可用的hadoop,远程可访问的mysql 2.拷贝hive文件(hive-2.2.1) 3.设置环境变量 export HIVE_HOME=/data/spar ...
- 存储引擎中MYIASM是什么意思
- 2018.10.25 bzoj4517: [Sdoi2016]排列计数(组合数学)
传送门 组合数学简单题. Ans=(nm)∗1Ans=\binom {n} {m}*1Ans=(mn)∗1~(n−m)(n-m)(n−m)的错排数. 前面的直接线性筛逆元求. 后面的错排数递推式本蒟 ...
- Java对象的克隆
今天要介绍一个概念,对象的克隆.本篇有一定难度,请先做好心理准备.看不懂的话可以多看两遍,还是不懂的话,可以在下方留言,我会看情况进行修改和补充. 克隆,自然就是将对象重新复制一份,那为什么要用克隆呢 ...
- s7-200 PID控位
只有加热模块,没有风扇,所以温度上冲达到5度左右 TITLE=程序注释 Network // 网络标题 // 初始化 LD SM0. LPS MOVW , VW500 MOVW , VW502 MOV ...
- IntelliJ IDEA 2017版 spring-boot 2.0.3 邮件发送搭建,概念梳理 (二)
第二部分 邮件发送历史 一.第一封邮件 1.1969年10月,世界上的第一封电子邮件 1969年10月世界上的第一封电子邮件是由计算机科学家Leonard K.教授发给他的同事的一条简短 ...