洛谷P3084 [USACO13OPEN]照片
\(DP\)
设状态\(dp[i]\)为\(i\)位置放了斑点牛,前\(i\)个位置能得到的最多的牛。
有方程\(dp[i]=max(dp[j]+1,dp[i])\),而我们并不知道什么\(j\)可以使\(i\)不在区间内
由于\(i\)位置放了牛,又因为\(i\)所在的区间只能放一个,\(j\)不能跟\(i\)同属于一个区间,又因为每个区间有且都有一个斑点牛,因此,每个区间都要有一个数,对于每个\(i\),都会有一段区间里的下标\(j\)可以用来转移\(i\),现在问题转化为了如何求对于每个\(i\)所对应的\(j\)的所在的区间问题。
每个区间不会有两个斑点牛此条件:首先\(j\)一定比\(i\)之后的所有位置的所在的最左边的左端点的区间要小这是显然的,设此左端点\(l\)为\(i\)对应的\(j\)最大为多少。
每个区间至少有一个斑点牛此条件:因为已经枚举到了第\(i\)个位置,因此\(r\)比\(i\)小的区间一定要有值,因此\(j\)一定要在一个\(r\)比\(i\)小且\(l\)最大的\(l\)右边,因为我们是动态规划,所以我们只需要用到\(dp[j]\)这个状态,而且这个状态在之前算\(dp[j]\)的时候就已经符合题目要求的了,而且\(j\)一定属于\(i\)之前的\(l\)最大的区间
#include <bits/stdc++.h>
#define N 2010010
using namespace std;
deque <int> q;
int n, m, ans, dp[N], l[N], r[N];//dp[i]表示i位置放斑点牛,前i个位置所得到的最多的牛。
//r[i]代表着i之后的区间的最小左端点。j一定不能比r[i]大
//l[i]代表着i之前的区间的最大左端点。j同时不能比l[i]小,因为如果j比l[i]小的话,那
inline void init()
{
scanf("%d%d", &n, &m);
for (int i = 1; i <= n + 1; i++)
r[i] = i;
for (int i = 1; i <= m; i++)
{
int a, b;
scanf("%d%d", &a, &b);
r[b] = min(a, r[b]);//b位置的j取值一定要比r小
l[b + 1] = max(a, l[b + 1]);//b+1的j位置一定要比l大
}
for (int i = n; i >= 1; i--)//此i的r值必须要比i+1小,因为i+1取不到的,i也不能取到。
r[i] = min(r[i + 1], r[i]);
for (int i = 2; i <= n + 1; i++)//此i的l值必须必i-1大,因为首先需要满足i-1位置的值。
l[i] = max(l[i - 1], l[i]);
}
int main()
{
init();
q.push_back(0);
int j = 1;
for (int i = 1; i <= n + 1; i++)
{
while (j < r[i])//j首先要比r小,
{
if (dp[j] != -1)
{
while (!q.empty() && dp[j] > dp[q.back()])
q.pop_back();
q.push_back(j);
}
j++;
}
while (!q.empty() && q.front() < l[i])//其次要比l大
q.pop_front();
if (!q.empty()) dp[i] = max(dp[i], dp[q.front()] + (int) (i != n + 1) );
else dp[i] = -1;
}
printf("%d", dp[n + 1] ? dp[n + 1] : -1);
return 0;
}
洛谷P3084 [USACO13OPEN]照片的更多相关文章
- 洛谷 P3084 [USACO13OPEN]照片Photo 解题报告
[USACO13OPEN]照片Photo 题目描述 农夫约翰决定给站在一条线上的\(N(1 \le N \le 200,000)\)头奶牛制作一张全家福照片,\(N\)头奶牛编号\(1\)到\(N\) ...
- 洛谷3084 [USACO13OPEN]照片Photo
原题链接 神仙\(DP\)啊... 题解请移步隔壁大佬的博客\(QAQ\) #include<cstdio> using namespace std; const int N = 2e5 ...
- 洛谷P3085 [USACO13OPEN]阴和阳Yin and Yang(点分治,树上差分)
洛谷题目传送门 闲话 偶然翻到一道没有题解的淀粉质,想证明一下自己是真的弱 然而ZSYC(字符串组合)早就切了 然后证明成功了,WA到怀疑人生,只好借着ZSY的代码拍,拍了几万组就出来了... 思路 ...
- P3084 [USACO13OPEN]照片Photo
题目描述 农夫约翰决定给站在一条线上的N(1 <= N <= 200,000)头奶牛制作一张全家福照片,N头奶牛编号1到N. 于是约翰拍摄了M(1 <= M <= 100,00 ...
- 洛谷 P1583 魔法照片【二级结构体排序】
题目描述 一共有n(n≤20000)个人(以1--n编号)向佳佳要照片,而佳佳只能把照片给其中的k个人.佳佳按照与他们的关系好坏的程度给每个人赋予了一个初始权值W[i].然后将初始权值从大到小进行排序 ...
- 洛谷P1583 魔法照片【模拟+排序】
一共有n(n≤20000)个人(以1--n编号)向佳佳要照片,而佳佳只能把照片给其中的k个人.佳佳按照与他们的关系好坏的程度给每个人赋予了一个初始权值W[i].然后将初始权值从大到小进行排序,每人就有 ...
- 洛谷 P2209 [USACO13OPEN]燃油经济性Fuel Economy
P2209 [USACO13OPEN]燃油经济性Fuel Economy 题目描述 Farmer John has decided to take a cross-country vacation. ...
- 洛谷 P1583 魔法照片
P1583 魔法照片 题目描述 一共有n(n≤20000)个人(以1--n编号)向佳佳要照片,而佳佳只能把照片给其中的k个人.佳佳按照与他们的关系好坏的程度给每个人赋予了一个初始权值W[i].然后将初 ...
- 洛谷P1583——魔法照片(结构体排序)
https://www.luogu.org/problem/show?pid=1583#sub 题目描述 一共有n(n≤20000)个人(以1--n编号)向佳佳要照片,而佳佳只能把照片给其中的k个人. ...
随机推荐
- @Bean修饰的方法参数的注入方式
@Bean修饰的方法参数的注入方式: 方法参数默认注入方式为Autowired,即先根据类型匹配,若有多个在根据名称进行匹配. 1:复杂类型可以通过@Qualifier(value=“XXX”)限定; ...
- golang学习笔记----并发
并发模型 并发目前来看比较主流的就三种: 多线程:每个线程一次处理一个请求,线程越多可并发处理的请求数就越多,但是在高并发下,多线程开销会比较大. 协程:无需抢占式的调度,开销小,可以有效的提高线程的 ...
- ipxe(可选):winboot:网络引导(启动)wim格式的windows PE系统:配置文件写法
ipxe 无盘[网络]引导wim格式的pe系统 wimboot引导程序需要为其提供4个内核参数 bcd bootmgr boot.sdi boot.wim 所需文件附件 以下是我的可用的ipxe的配置 ...
- WPF 精修篇 Winform 嵌入WPF控件
原文:WPF 精修篇 Winform 嵌入WPF控件 首先 创建WPF控件库 这样就有了一个WPF界面 在wpf中增加界面等 在winform中增加WPFDLL 重新生成解决方案 在左侧工具栏 出现W ...
- PIE SDK图像重采样算法
1.算法功能简介 图像重采样是指对采样后形成的由离散数据组成的数字图像按所需的像元位置或像元问距重新采样,以构成几何变换后的新图像.重采样过程本质上是图像恢复过程,它用输入的离散数字图像重建代表原始图 ...
- template might not exist or might not be accessible by any of the configured Template Resolvers 完美解决
初学者在maven spring boot web项目中使用thymeleaf 模板,经常会遇到 “template might not exist or might not be accessib ...
- html5新增表单控件和表单属性
表单验证 Invalid事件 : 验证反馈 input.addEventListener('invalid',fn,false) 阻止默认验证:ev.preventDefault() formnova ...
- SpringApplication到底run了什么(下)
在上篇文章中SpringApplication到底run了什么(上)中,我们分析了下面这个run方法的前半部分,本篇文章继续开工 public ConfigurableApplicationConte ...
- CDH报错:PersistenceException: [PersistenceUnit: cmf.server] Unable to build EntityManagerFactory
1.在启动CDH中master的服务cloudera-scm-server start并立刻挂掉了,提示如下错误 org.springframework.beans.factory.BeanCreat ...
- Robot Framework RIDE介绍
快捷键 F8 -执行测试用例 F5 -查看关键字 Edit标签 测试项目和测试套件所提供的Edit标签是一致的,两者功能也一样.