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

很神仙的dp...假装自己看懂了,以后回来复习复习... 设$f_{i}$表示从$1$到$i$,且$i$这个点必放的最大数量. 一个区间有两个限制条件:至少放一个,至多放一个. 因为一个区间至多要放一个,所以所有包含这个点的区间都不能再放,设$r_{i}$表示包含这个点的区间中最小的左端点$ - 1$. 因为一个区间至少要放一个,所以不能有区间中一个都不放,设$l_{i}$表示整个区间在当前点之前的最大的左端点. 这样子就有了转移方程:$f_{i} = max(f_{j}) + 1$  $(l_…
原题链接 神仙\(DP\)啊... 题解请移步隔壁大佬的博客\(QAQ\) #include<cstdio> using namespace std; const int N = 2e5 + 10; int L[N], R[N], q[N], f[N]; inline int re() { int x = 0; char c = getchar(); bool p = 0; for (; c < '0' || c > '9'; c = getchar()) p |= c == '-…
[USACO13OPEN]照片Photo 题目描述 农夫约翰决定给站在一条线上的\(N(1 \le N \le 200,000)\)头奶牛制作一张全家福照片,\(N\)头奶牛编号\(1\)到\(N\). 于是约翰拍摄了\(M(1 \le M \le 100,000)\)张照片,每张照片都覆盖了连续一段奶牛:第\(i\)张照片中包含了编号\(a_i\) 到 \(b_i\)的奶牛.但是这些照片不一定把每一只奶牛都拍了进去. 在拍完照片后,约翰发现了一个有趣的事情:每张照片中都有且仅有一只身上带有斑点…
题目描述 Farmer John has decided to assemble a panoramic photo of a lineup of his N cows (1 <= N <= 200,000), which, as always, are conveniently numbered from 1..N. Accordingly, he snapped M (1 <= M <= 100,000) photos, each covering a contiguous r…
题目链接:传送门 题目: 题目描述 Farmer John has decided to assemble a panoramic photo of a lineup of his N cows ( <= N <= ,), which, ..N. Accordingly, he snapped M ( <= M <= ,) photos, each covering a contiguous range of cows: photo i contains cows a_i thro…
题目描述 农夫约翰决定给站在一条线上的N(1 <= N <= 200,000)头奶牛制作一张全家福照片,N头奶牛编号1到N. 于是约翰拍摄了M(1 <= M <= 100,000)张照片,每张照片都覆盖了连续一段奶牛:第i张照片中包含了编号a_i 到 b_i的奶牛.但是这些照片不一定把每一只奶牛都拍了进去. 在拍完照片后,约翰发现了一个有趣的事情:每张照片中都有一只身上带有斑点的奶牛.约翰意识到他的牛群中有一些斑点奶牛,但他从来没有统计过它们的数量. 根据照片,请你帮约翰估算在他的…
题意: 有n个区间,每个区间只能有一个斑点奶牛,问最多有几个斑点奶牛. 思路: 首先要处理出每个点的L[i],R[i]. L[i]表示L[i]-i-1之间一定有一个点.i也是选中的. R[i]表示R[i]-i之间只能有i这个点是选中的. 通过处理出L[i]和R[i],dp[i] = 最大的L[i]到R[i]间dp值 + 1.这里用线段树优化,也可以用优先队列. #include <algorithm> #include <iterator> #include <iostrea…
题面 这道题似乎可以用单调队列优化DP做,但这里讲的是一种差分约束的思路; 设s[i]表示1~i中选了多少个: s[b[i]]-s[a[i]-1]<=1; s[b[i]]-s[a[i]-1]>=1; s[i]-s[i-1]<=1; s[i]-s[i-1]>=0; 然后跑SPFA最短路: 但要注意:普通的SPFA根本就过不去,所以我们应该使用双端队列优化的梦想SPFA: #include <bits/stdc++.h> using namespace std; struc…
[简●解][USACO] 照片Photo [题目大意] 在\(1\)~\(N\)的序列上有\(M\)个区间,使得这\(M\)个小区间每个覆盖了且仅覆盖了一个点,求最多点数,如果无解,输出\(-1\). [分析] 刚开始做的时候我是懵的...不管三七二十一开始想差分约束系统,无奈没那么好的思维,没想出来... 一翻题解,,\(WOC!!!\)这是什么神仙\(DP?\)真的是学到了... 我们设\(f[i]\)表示序列的第\(i\)位是一个点时,序列\(1\)~\(i\)的最多点数. 那么\(dp\…
(已经有了简化版题面) 又秒了一次dp233 本来按照感觉瞎写了一发... 但还是老老实实列式子吧.... 对差分约束有了更深的理解 #include<cstdio> #include<iostream> #include<queue> #include<cstring> using namespace std; /*不等式*3设前i头奶牛有斑点牛d[]个,设lr为给定区间则:1.每个区间有且只有一头奶牛有斑点=>d[r]-d[l-1]=1; 2.两只…