【BZOJ 1597】 [Usaco2008 Mar]土地购买
【链接】 我是链接,点我呀:)
【题意】
在这里输入题意
【题解】
把这n个土地按照x为第一关键字、y为第二关键字。都升序排。
然后考虑一个土地xi,yi
若有一个土地的x这个去掉土地的过程可以用单调队列实现。
这样。我们会发现剩下的土地按照从1开始的顺序。
就x是升序的,且y是降序的了。
接下来,会发现我们要买的土地,肯定都是连续一段地买的。
比如,你买了第一个土地,又买了第3个土地。
那么你肯定再把第二个土地买了更优。
因为花费只取决于第一个土地的y和第3个土地的x了(y递减,x递增);
你中间不论有多少土地。花费都是一样的。
因此,买的肯定都是一段一段的。
做个DP就好。
设f[i]表示i是最后一段的**最后一段**的**最小花费**
方程是
$f[i] = min(f[j]+x_i*y_{j+1})$
加一个斜率优化就好
【错的次数】
在这里输入错的次数
【反思】
在这里输入反思
【代码】
#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int N = 5e4;
int n, dl[N + 10], h, t;
pair <ll, ll> b[N + 10],a[N+10];
ll f[N + 10];
double ju(int x, int y)
{
double fenzi = f[y] - f[x];
double fenmu = a[x + 1].second - a[y + 1].second;
return fenzi / fenmu;
}
int main()
{
//freopen("F:\\rush.txt", "r", stdin);
scanf("%d", &n);
for (int i = 1; i <= n; i++) scanf("%lld%lld", &b[i].first, &b[i].second);
sort(b + 1, b + 1 + n);
int nn = 0;
for (int i = 1; i <= n; i++)
{
while (nn > 0 && a[nn].second <= b[i].second) nn--;
a[++nn] = b[i];
}
n = nn;
h = t = 1;
dl[1] = 0;
for (int i = 1; i <= n; i++)
{
while (h < t && ju(dl[h], dl[h + 1]) < a[i].first) h++;
int j = dl[h];
f[i] = f[j] + a[i].first*a[j + 1].second;
while (h < t && ju(dl[t - 1], dl[t]) > ju(dl[t], i)) t--;
dl[++t] = i;
}
printf("%lld\n", f[n]);
return 0;
}
【BZOJ 1597】 [Usaco2008 Mar]土地购买的更多相关文章
- BZOJ 1597: [Usaco2008 Mar]土地购买 [斜率优化DP]
1597: [Usaco2008 Mar]土地购买 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 4026 Solved: 1473[Submit] ...
- 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] ...
- BZOJ 1597: [Usaco2008 Mar]土地购买 斜率优化
1597: [Usaco2008 Mar]土地购买 Time Limit: 10 Sec Memory Limit: 162 MB Description 农夫John准备扩大他的农场,他正在考虑N ...
- 斜率优化专题1——bzoj 1597 [Usaco2008 Mar] 土地购买 题解
转载请注明:http://blog.csdn.net/jiangshibiao/article/details/24387147 [原题] 1597: [Usaco2008 Mar]土地购买 Time ...
- BZOJ 1597 [Usaco2008 Mar]土地购买:斜率优化dp
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1597 题意: 有n块矩形土地,长为a[i],宽为b[i]. FJ想要将这n块土地全部买下来 ...
- bzoj 1597: [Usaco2008 Mar]土地购买
Description 农 夫John准备扩大他的农场,他正在考虑N (1 <= N <= 50,000) 块长方形的土地. 每块土地的长宽满足(1 <= 宽 <= 1,000 ...
- bzoj 1597 [Usaco2008 Mar]土地购买——斜率优化dp
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1597 又一道斜率优化dp.负数让我混乱.不过仔细想想还是好的. 还可以方便地把那个负号放到x ...
- bzoj 1597: [Usaco2008 Mar]土地购买【斜率优化】
按xy降序排序,把能被完全包含的去掉 然后就得到了x升序y降序的一个数组 然后方程就显然了:f[i]=min(f[j]+y[j+1]x[i]) 斜率优化转移 说起来我还不会斜率优化呢是不是该学一下了 ...
- BZOJ 1597: [Usaco2008 Mar]土地购买 动态规划 + 斜率优化
Code: #include<bits/stdc++.h> #define maxn 1000000 #define ll long long #define x(i) (b[i+1]) ...
随机推荐
- 体验 Windows 系统 CVM
添加角色功能: service.msc 设置自动服务,net start telnet
- 2017国家集训队作业[agc004f]Namori
2017国家集训队作业[agc004f]Namori 题意: 给你一颗树或环套树,树上有\(N\)个点,有\(M\)条边.一开始,树上的点都是白色,一次操作可以选择一条端点颜色相同的边,使它的端点颜色 ...
- [lougu1341]无序字母对
Description: 给定n个各不相同的无序字母对(区分大小写,无序即字母对中的两个字母可以位置颠倒).请构造一个有n+1个字母的字符串使得每个字母对都在这个字符串中出现. Solution: 欧 ...
- 【Hello 2018 D】Too Easy Problems
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 可以考虑把所有的题目按照ai排序. 然后顺序考虑最后做出来的题目个数和第i道题目的ai一样. 则1..i-1这些题目就没有用了. 值 ...
- Java基础学习总结(21)——常用正则表达式列表
很多不太懂正则的朋友,在遇到需要用正则校验数据时,往往是在网上去找很久,结果找来的还是不很符合要求.所以我最近把开发中常用的一些正则表达式整理了一下,包括校验数字.字符.一些特殊的需求等等.给自己留个 ...
- iOS 基于第三方QQ授权登录
基于iOS实现APP的第三方QQ登陆.接入第三方SDK时的一个主要的步骤: 1,找到相关的开放平台.QQ互联平台,http://connect.qq.com/: 2,注冊成功后创建自己的APP.填写一 ...
- golang中new和make区别
golang 中有两个内存分配机制 :new和make,二者有明显区别. new:用来初始化一个对象,并且返回该对象的首地址.其自身是一个指针.可用于初始化任何类型 make:返回一个初始化的实例,返 ...
- BZOJ4864: [BeiJing 2017 Wc]神秘物质(Splay)
Description 21ZZ 年,冬. 小诚退休以后, 不知为何重新燃起了对物理学的兴趣. 他从研究所借了些实验仪器,整天研究各种微观粒子.这 一天, 小诚刚从研究所得到了一块奇异的陨石样本, 便 ...
- C#之在treeview中鼠标点击的所选的节点触发事件
一.背景 如下图所示,我想实现通过鼠标点击treeview的根节点,然后在文本框控件中显示鼠标点击的节点号. 二.程序实现 因为是要通过鼠标点击才发生的事情,所以这属于一个事件,需要触发才行,刚开始不 ...
- 4.Windows下安装ZooKeeper
转自:https://www.cnblogs.com/mstmdev/p/5612791.html 官方主页: https://zookeeper.apache.org/ 选择合适的镜像地址下 ...