很神仙的dp...假装自己看懂了,以后回来复习复习...

设$f_{i}$表示从$1$到$i$,且$i$这个点必放的最大数量。

一个区间有两个限制条件:至少放一个,至多放一个。

因为一个区间至多要放一个,所以所有包含这个点的区间都不能再放,设$r_{i}$表示包含这个点的区间中最小的左端点$ - 1$。

因为一个区间至少要放一个,所以不能有区间中一个都不放,设$l_{i}$表示整个区间在当前点之前的最大的左端点。

这样子就有了转移方程:$f_{i} = max(f_{j}) + 1$  $(l_{i} \leq j \leq r_{i})$。

弄一个单调队列优化。

读入的时候读入了$x$和$y$,用$x - 1$更新$r_{y}$,用$x$更新$l_{y + 1}$。

有一点问题就是可能会出现$l$不严格不下降,$r$不严格不上升的情况,考虑到$l$, $r$的现实意义,所以处理完读入的时候扫一遍处理一下。

细节:

1、因为$f$表示必选的情况,那么可以让$f_{n + 1}$参与转移,如果$f_{n + 1}$合法,那么最后答案就是$f_{n + 1} - 1$。(我就是这样WA1次的)

2、把不合法的状态标记为$-1$,注意不合法的状态不参与转移。(我就是这样又WA了一次)

还是太菜了。

时间复杂度$O(n)$。

Code:

#include <cstdio>
#include <cstring>
using namespace std;; const int N = 2e5 + ; int n, m, ln[N], rn[N], q[N], f[N]; inline void read(int &X) {
X = ; char ch = ; int op = ;
for(; ch > ''|| ch < ''; ch = getchar())
if(ch == '-') op = -;
for(; ch >= '' && ch <= ''; ch = getchar())
X = (X << ) + (X << ) + ch - ;
X *= op;
} inline void chkMax(int &x, int y) {
if(y > x) x = y;
} inline void chkMin(int &x, int y) {
if(y < x) x = y;
} int main() {
// freopen("testdata.in", "r", stdin); read(n), read(m);
for(int i = ; i <= n + ; i++) rn[i] = i - ;
for(int x, y, i = ; i <= m; i++) {
read(x), read(y);
chkMin(rn[y], x - );
chkMax(ln[y + ], x);
} for(int i = n; i >= ; i--) chkMin(rn[i], rn[i + ]);
for(int i = ; i <= n; i++) chkMax(ln[i], ln[i - ]); int l = , r = , pos = ; q[] = ;
for(int i = ; i <= n + ; i++) {
for(; l <= r && q[l] < ln[i]; ++l);
if(l <= r) f[i] = f[q[l]] + ;
else f[i] = -;
for(; pos <= rn[i + ]; ++pos) {
if(f[pos] == -) continue;
for(; l <= r && f[q[l]] < f[pos]; --r);
q[++r] = pos;
}
} if(f[n + ] != -) f[n + ]--;
printf("%d\n", f[n + ]);
return ;
}

Luugu 3084 [USACO13OPEN]照片Photo的更多相关文章

  1. 洛谷3084 [USACO13OPEN]照片Photo

    原题链接 神仙\(DP\)啊... 题解请移步隔壁大佬的博客\(QAQ\) #include<cstdio> using namespace std; const int N = 2e5 ...

  2. 洛谷 P3084 [USACO13OPEN]照片Photo 解题报告

    [USACO13OPEN]照片Photo 题目描述 农夫约翰决定给站在一条线上的\(N(1 \le N \le 200,000)\)头奶牛制作一张全家福照片,\(N\)头奶牛编号\(1\)到\(N\) ...

  3. [USACO13OPEN]照片Photo

    题目描述 Farmer John has decided to assemble a panoramic photo of a lineup of his N cows (1 <= N < ...

  4. P3084 [USACO13OPEN]照片Photo (dp+单调队列优化)

    题目链接:传送门 题目: 题目描述 Farmer John has decided to assemble a panoramic photo of a lineup of his N cows ( ...

  5. P3084 [USACO13OPEN]照片Photo

    题目描述 农夫约翰决定给站在一条线上的N(1 <= N <= 200,000)头奶牛制作一张全家福照片,N头奶牛编号1到N. 于是约翰拍摄了M(1 <= M <= 100,00 ...

  6. P3084 [USACO13OPEN]照片Photo dp

    题意: 有n个区间,每个区间只能有一个斑点奶牛,问最多有几个斑点奶牛. 思路: 首先要处理出每个点的L[i],R[i]. L[i]表示L[i]-i-1之间一定有一个点.i也是选中的. R[i]表示R[ ...

  7. [USACO13OPEN]照片Photo 题解

    题面 这道题似乎可以用单调队列优化DP做,但这里讲的是一种差分约束的思路; 设s[i]表示1~i中选了多少个: s[b[i]]-s[a[i]-1]<=1; s[b[i]]-s[a[i]-1]&g ...

  8. 【简●解】[USACO] 照片Photo

    [简●解][USACO] 照片Photo [题目大意] 在\(1\)~\(N\)的序列上有\(M\)个区间,使得这\(M\)个小区间每个覆盖了且仅覆盖了一个点,求最多点数,如果无解,输出\(-1\). ...

  9. P3084 [USACO13OPEN]照片(差分约束)

    (已经有了简化版题面) 又秒了一次dp233 本来按照感觉瞎写了一发... 但还是老老实实列式子吧.... 对差分约束有了更深的理解 #include<cstdio> #include&l ...

随机推荐

  1. python的动态性和_slot_

    python是动态语言 1. 动态语言的定义 动态编程语言 是 高级程序设计语言 的一个类别,在计算机科学领域已被广泛应用.它是一类 在运行时可以改变其结构的语言 :例如新的函数.对象.甚至代码可以被 ...

  2. angular 获取当前值

  3. leetcode929

    package main import ( "fmt" "strings" ) func numUniqueEmails(emails []string) in ...

  4. require.js 学习基础

    RequireJS 是一个JavaScript模块加载器,他的目标是鼓励代码的模块化,它使用了不同于传统<script>标签的脚本加载步骤.可以用它来加速.优化代码,但其主要目的还是为了代 ...

  5. java 项目中类找不到异常解决办法

    最后点击Apply and Close就可以了

  6. Django之 Model Field Options

    以下这些选项都是可选择的,非固定要求. 1)null,注意在CharField或者TextField里避免使用null,因为其存储的值是空字符串而不是NULL 2)blank该字段是否可以为空.如果为 ...

  7. python: no module named bz2

    https://stackoverflow.com/questions/8115280/importerror-no-module-named-bz2-for-python-2-7-2 centos6 ...

  8. TensorFlow入门-Tianic数据集训练

    import pandas as pd import tensorflow as tf from sklearn.model_selection import train_test_split imp ...

  9. struts2,servlet和springmvc的单例多例问题

    struts2,servlet和springmvc的单例多例问题 原创 2017年06月12日 09:59:21 标签: struts2 / servlet / springmvc / 单例 / 多例 ...

  10. jstatd - Virtual Machine jstat Daemon

    jstatd [options] 参数:options 命令行参数,可以按任何顺序,但如果有多余的或者中有互斥的参数,最后制定的那个参数将有优先权 options: -nr 当一个存在的RMI Reg ...