Luugu 3084 [USACO13OPEN]照片Photo
很神仙的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的更多相关文章
- 洛谷3084 [USACO13OPEN]照片Photo
原题链接 神仙\(DP\)啊... 题解请移步隔壁大佬的博客\(QAQ\) #include<cstdio> using namespace std; const int N = 2e5 ...
- 洛谷 P3084 [USACO13OPEN]照片Photo 解题报告
[USACO13OPEN]照片Photo 题目描述 农夫约翰决定给站在一条线上的\(N(1 \le N \le 200,000)\)头奶牛制作一张全家福照片,\(N\)头奶牛编号\(1\)到\(N\) ...
- [USACO13OPEN]照片Photo
题目描述 Farmer John has decided to assemble a panoramic photo of a lineup of his N cows (1 <= N < ...
- P3084 [USACO13OPEN]照片Photo (dp+单调队列优化)
题目链接:传送门 题目: 题目描述 Farmer John has decided to assemble a panoramic photo of a lineup of his N cows ( ...
- P3084 [USACO13OPEN]照片Photo
题目描述 农夫约翰决定给站在一条线上的N(1 <= N <= 200,000)头奶牛制作一张全家福照片,N头奶牛编号1到N. 于是约翰拍摄了M(1 <= M <= 100,00 ...
- P3084 [USACO13OPEN]照片Photo dp
题意: 有n个区间,每个区间只能有一个斑点奶牛,问最多有几个斑点奶牛. 思路: 首先要处理出每个点的L[i],R[i]. L[i]表示L[i]-i-1之间一定有一个点.i也是选中的. R[i]表示R[ ...
- [USACO13OPEN]照片Photo 题解
题面 这道题似乎可以用单调队列优化DP做,但这里讲的是一种差分约束的思路; 设s[i]表示1~i中选了多少个: s[b[i]]-s[a[i]-1]<=1; s[b[i]]-s[a[i]-1]&g ...
- 【简●解】[USACO] 照片Photo
[简●解][USACO] 照片Photo [题目大意] 在\(1\)~\(N\)的序列上有\(M\)个区间,使得这\(M\)个小区间每个覆盖了且仅覆盖了一个点,求最多点数,如果无解,输出\(-1\). ...
- P3084 [USACO13OPEN]照片(差分约束)
(已经有了简化版题面) 又秒了一次dp233 本来按照感觉瞎写了一发... 但还是老老实实列式子吧.... 对差分约束有了更深的理解 #include<cstdio> #include&l ...
随机推荐
- 报错:ORA-02264
创建表时报错ORA-02264:名称已被一个现有约束条件占用 查询约束名称“PK_DATASOUCE”,然后删除. SELECT a.* FROM user_constraints a where c ...
- uva-10160-枚举
若当前搜索到的城市n前面1-n-1编号的城市中有没有通电的,则永远也无法输送电力给那个城市,因为在剪枝时附加了和此结点连接的最大结点小于当前的结点 这段 for(int i = 1; i < c ...
- 0_Simple__simpleTexture + 0_Simple__simpleTextureDrv
使用纹理引用来旋转图片,并在使用了静态编译和运行时编译两种环境. ▶ 源代码:静态编译 #include <stdio.h> #include <windows.h> #inc ...
- linux装机首先需要关闭的服务
关闭selinux和iptables:setenforce 0 iptables -Fiptables -t nat -Fsystemctl stop firewalldsystemctl disab ...
- DEMO: springboot 与 mybatis 集成
之前一直在用springMVC,接触到springboot之后,感觉使用起来方便多了,没那多xml需要配置. 先来看看整个项目结构,当然是maven项目. 1.测试数据 DROP TABLE IF E ...
- windows与linux环境查看jdk安装路径
windows: set java_home 查看jdk安装路径 java -version 查看jdk版本 linux: whereis java which java(java执行路径) echo ...
- Packed with amazing data about the world in 201
Only those who have the patience to do simple things,perfectly ever acquire the skill to do difficul ...
- Haskell语言学习笔记(46)Parsec(3)
Applicative Parsing 使用 Applicative 式的 Parser. 包括使用 (<$>), (<*>), (<$), (<*), (*> ...
- ubuntu ftp 建立匿名用户 [转]
转自:http://www.cnblogs.com/cocoajin/p/3761414.html ubuntu server vsftpd 匿名用户上传下载及目录设置 1:vsftpd服务器安装: ...
- spring ioc 注解配置
要注意spring 版本与jdk的兼容性 applicationContext-resource.xml: <beans xmlns="http://www.springframewo ...