NOIP模拟 Pyramid - 斜率优化DP
题目大意:
给一个金字塔图(下面的宽度大于等于上面的宽度),每层的高度为1,从中选取k个互不重叠的矩形,使面积最大。

题目分析:
\(f[i][j]\)表示选到第i层,选择了j个矩形的最优方案。
转移方程:$$f[i][k] = max{f[j][k - 1] + (i - j) * (y[i] - x[i] + 1)}$$
列式并化简为斜率形式:$$S(i, j) = \frac{f[i] - f[j]}{i - j} >= y[i] - x[i] + 1$$
斜率dp裸题。
code
#include<bits/stdc++.h>
using namespace std;
const int N = 20050, K = 150;
int n, k, x[N], y[N];
typedef long long ll;
ll f[N][K];
int que[N * 2];
ll tmp[N];
inline ll calc(int i, int j){
return tmp[j] + 1ll*(i - j) * (y[i] - x[i] + 1);
}
inline bool slopeCheck(int i, int j, int k){
return (tmp[i] - tmp[j]) * (j - k) >=
(tmp[j] - tmp[k]) * (i - j);
}
int main(){
freopen("h.in", "r", stdin);
scanf("%d%d", &n, &k);
for(int i = 1; i <= n; i++) scanf("%d%d", &x[i], &y[i]);
for(int i = 1; i <= k; i++){
int head, tail;
que[head = tail = 1] = 0;
for(int j = 1; j <= n; j++) tmp[j] = f[j][i - 1];
for(int j = 1; j <= n; j++){
while(head + 1 <= tail && calc(j, que[head]) <= calc(j, que[head + 1])) head++;
f[j][i] = calc(j, que[head]);
while(head <= tail - 1 && slopeCheck(j, que[tail], que[tail - 1])) tail--;
que[++tail] = j;
}
}
ll ans = 0;
for(int i = 1; i <= n; i++) ans = max(ans, f[i][k]);
printf("%lld", ans);
}
NOIP模拟 Pyramid - 斜率优化DP的更多相关文章
- 【学习笔记】动态规划—斜率优化DP(超详细)
[学习笔记]动态规划-斜率优化DP(超详细) [前言] 第一次写这么长的文章. 写完后感觉对斜优的理解又加深了一些. 斜优通常与决策单调性同时出现.可以说决策单调性是斜率优化的前提. 斜率优化 \(D ...
- bzoj-4518 4518: [Sdoi2016]征途(斜率优化dp)
题目链接: 4518: [Sdoi2016]征途 Description Pine开始了从S地到T地的征途. 从S地到T地的路可以划分成n段,相邻两段路的分界点设有休息站. Pine计划用m天到达T地 ...
- bzoj-1096 1096: [ZJOI2007]仓库建设(斜率优化dp)
题目链接: 1096: [ZJOI2007]仓库建设 Description L公司有N个工厂,由高到底分布在一座山上.如图所示,工厂1在山顶,工厂N在山脚.由于这座山处于高原内陆地区(干燥少雨),L ...
- [BZOJ3156]防御准备(斜率优化DP)
题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=3156 分析: 简单的斜率优化DP
- 【BZOJ-1096】仓库建设 斜率优化DP
1096: [ZJOI2007]仓库建设 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 3719 Solved: 1633[Submit][Stat ...
- BZOJ 1010: [HNOI2008]玩具装箱toy 斜率优化DP
1010: [HNOI2008]玩具装箱toy Description P教授要去看奥运,但是他舍不下他的玩具,于是他决定把所有的玩具运到北京.他使用自己的压缩器进行压缩,其可以将任意物品变成一堆,再 ...
- BZOJ 3156: 防御准备 斜率优化DP
3156: 防御准备 Description Input 第一行为一个整数N表示战线的总长度. 第二行N个整数,第i个整数表示在位置i放置守卫塔的花费Ai. Output 共一个整数,表示最小的战 ...
- HDU2829 Lawrence(斜率优化dp)
学了模板题之后上网搜下斜率优化dp的题目,然后就看到这道题,知道是斜率dp之后有思路就可以自己做不出来,要是不事先知道的话那就说不定了. 题意:给你n个数,一开始n个数相邻的数之间是被东西连着的,对于 ...
- HDU3507 Print Article(斜率优化dp)
前几天做多校,知道了这世界上存在dp的优化这样的说法,了解了四边形优化dp,所以今天顺带做一道典型的斜率优化,在百度打斜率优化dp,首先弹出来的就是下面这个网址:http://www.cnblogs. ...
随机推荐
- loadrunner11 +Win7 + 支持ie9,录制成功
loadrunner11 支持ie9,录制成功 中文例子: https://wenku.baidu.com/view/1123925377232f60ddcca149.html http://blog ...
- tcl -mode
-exact 严格匹配(如string equal) -glob 通配符式匹配(string match) -regexp 正则表达式匹配(regexp) array get和array ...
- Android SimpleAdapter
1.MainActivity.java public class MainActivity extends Activity { private ListView listView; private ...
- 最新GitHub新手使用教程(Linux/Ubuntu Git从安装到使用)——详细图解
说明:该篇博客是博主一字一码编写的,实属不易,请尊重原创,谢谢大家! 一.叙述 1.说明:需要在Windows 安装Git的同学,可以查看该篇博客 https://blog.csdn.net/qq_4 ...
- Loadrunner--基准测试的两种方法
2 练习基准测试方法1 2.1 问题 为登录业务设计场景. 2.2 方案 在控制台中使用循环多次的方式执行场景.(多次数) 2.3 步骤 实现此案例需要执行以下步骤: 步骤一: 1.打开控制台,如下图 ...
- Linear to physical address translation with support for page attributes
Embodiments of the invention are generally directed to systems, methods, and apparatuses for linear ...
- php实现 查找输入整数二进制中1的个数
php实现 查找输入整数二进制中1的个数 一.总结 一句话总结: 1.if($j&intval($num)){}的作用是什么? 1 <?php 2 while($num=trim(fge ...
- C语言深度剖析-----数组参数和指针参数分析
数组退化的意义 当向函数传递数组时, 二维数组参数 等价关系 注意事项 只能去一维数组 无法向一个函数传递一个任意的多维数组,注释地方出错 传递与访问二维数组的方式 动态地算出二维数组的列
- (转)把Sublime Text 2 加入右键菜单(带图标),Edit with Sublime Text
转自 http://www.turen.me/archives/509 Sublime Text 2 是现在很受大家欢迎的编辑器了,不仅是在web前端,在书定简单的php.Js等代码时,也是相当的好用 ...
- Snail—UI学习之自己定义标签栏UITabBarController
这里的背景跟上面的差点儿相同 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkF ...