Codeforces Gym 101194C Mr. Panda and Strips(2016 EC-Final,区间DP预处理 + 枚举剪枝)
题目链接 2016 EC-Final
题意 现在要找到数列中连续两个子序列(没有公共部分)。要求这两个子序列本身内部没有重复出现的数。
求这两个子序列的长度的和的最大值。
首先预处理一下。令$f[i][j]$为$i$到$j$这段数字里面能找到的符合题意条件的区间的长度的最大值。
这段预处理时间复杂度$O(n^{2})$
然后$O(n^{2})$枚举第一个区间,如果出现重复的数字了那么的第二层循环break掉。
记当前枚举到的区间的长度为$s$
在刚刚枚举的基础上,考虑枚举到的这个区间的右边的这些数,如果某个数字在前面那个区间中出现过了,
那么这个位置标记$1$,否则标记$0$。
做一次$O(n)$的扫描,每次找到连续的最多的$0$的区间,记为$c_{x}...c_{y}$
用$s + f[x][y]$更新答案
若当前枚举能得到的最优答案小于已经得到的答案了,那么就直接输出。
时间复杂度$O(n^{3})$
#include <bits/stdc++.h> using namespace std; #define rep(i, a, b) for (int i(a); i <= (b); ++i)
#define dec(i, a, b) for (int i(a); i >= (b); --i) const int N = 1e3 + 3; int f[N][N], a[N], b[N];
int T, n, cnt, ans, ca = 0;
bitset <N> tmp, bit;
vector <int> v[N]; int main(){ scanf("%d", &T);
while (T--){
scanf("%d", &n);
rep(i, 1, n) scanf("%d", a + i), b[i] = a[i];
sort(b + 1, b + n + 1);
cnt = unique(b + 1, b + n + 1) - b - 1;
rep(i, 1, n) a[i] = lower_bound(b + 1, b + cnt + 1, a[i]) - b; rep(i, 1, n) v[i].clear();
rep(i, 1, n) v[a[i]].push_back(i); rep(i, 0, n + 1) rep(j, 0, n + 1) f[i][j] = 0;
rep(i, 1, n){
tmp.reset();
rep(j, i, n){
if (tmp[a[j]]) break;
tmp.set(a[j]);
f[i][j] = j - i + 1;
}
}
ans = 0;
dec(i, n - 1, 1) rep(j, i + 1, n) f[i][j] = max(f[i][j], max(f[i + 1][j], f[i][j - 1])); rep(i, 1, n){
if (n - i + 1 <= ans) break;
tmp.reset();
bit.reset();
rep(j, i, n){
if (tmp[a[j]]) break;
tmp.set(a[j]);
for (auto u : v[a[j]]) bit.set(u);
int now = 0;
int l = j + 1;
rep(r, j + 1, n) if (!bit[r]) now = max(now, f[l][r]); else l = r + 1;
if (j - i + 1 + now > ans){
ans = j - i + 1 + now;
}
}
}
printf("Case #%d: %d\n", ++ca, ans);
} return 0;
}
Codeforces Gym 101194C Mr. Panda and Strips(2016 EC-Final,区间DP预处理 + 枚举剪枝)的更多相关文章
- Codeforces Gym 101775D Mr. Panda and Geometric Sequence(2017-2018 ACM-ICPC Asia East Continent League Final,D题,枚举剪枝)
题目链接 ECL-Final 2017 Problem D 题意 给定$2*10^{5}$组询问,每个询问求$l$到$r$之间有多少个符合条件的数 如果一个数小于等于$10^{15}$, 并且能被 ...
- Gym 101194C / UVALive 7899 - Mr. Panda and Strips - [set][2016 EC-Final Problem C]
题目链接: http://codeforces.com/gym/101194/attachments https://icpcarchive.ecs.baylor.edu/index.php?opti ...
- Gym 101194F Mr. Panda and Fantastic Beasts
#include<bits/stdc++.h> using namespace std; #define ms(arr,a) memset(arr,a,sizeof arr) #defin ...
- LOJ 2292 「THUSC 2016」成绩单——区间DP
题目:https://loj.ac/problem/2292 直接 DP 很难做,主要是有那种 “一个区间内部有很多个别的区间” 的情况. 自己想了一番枚举 max-min 的最大限制,然后在该基础上 ...
- Gym - 101670F Shooting Gallery(CTU Open Contest 2017 区间dp)
题目&题意:(有点难读...) 给出一个数字序列,找出一个区间,当删除这个区间中的两个相同的数字后,只保留这两个数字之间的序列,然后继续删除相同的数字,问最多可以实行多少次删除操作. 例如: ...
- H - Mr. Panda and Birthday Song Gym - 101775H (动态规划)
Mrs. Panda’s birthday is coming. Mr. Panda wants to compose a song as gift for her birthday. It is k ...
- Codeforces Gym 100002 Problem F "Folding" 区间DP
Problem F "Folding" Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/ ...
- Codeforces Gym 101252D&&floyd判圈算法学习笔记
一句话题意:x0=1,xi+1=(Axi+xi%B)%C,如果x序列中存在最早的两个相同的元素,输出第二次出现的位置,若在2e7内无解则输出-1. 题解:都不到100天就AFO了才来学这floyd判圈 ...
- Codeforces Gym 101190M Mole Tunnels - 费用流
题目传送门 传送门 题目大意 $m$只鼹鼠有$n$个巢穴,$n - 1$条长度为$1$的通道将它们连通且第$i(i > 1)$个巢穴与第$\left\lfloor \frac{i}{2}\rig ...
随机推荐
- Codeforces Round #456 (Div. 2) A. Tricky Alchemy
传送门:http://codeforces.com/contest/912/problem/A A. Tricky Alchemy time limit per test1 second memory ...
- 59、佳博wifi打印机怎么配置
1.去这里下载配置软件(注意,需要再windows下进行)http://pan.baidu.com/s/1bn1y4FX,并解压安装程序 2.连上wifi打印机的热点,比如说佳博打印机的默认为Gpri ...
- Monkey log异常分析说明
以下主要针对在Android-Phone项目中进行Monkey log进行分析和说明,可以对bug提交作为参考. 要求熟悉,应用的包名.也就是说那个应用包出现问题,该属于那个模块,应用包名是判断依据. ...
- XMind8 Pro激活
最近使用XMind8 还不错,奈何更多功能是需要升级8Pro才能使用,现已经激活成功,记录下过程: 1.下载XMind8 Update4并且安装,此安装过程简单[安装包太大,无法上传,正在想办法] 2 ...
- asp.net允许跨域访问
C# ASP.NET MVC 配置允许跨域访问 在web.config文件中的 system.webServer 节点下 增加如下配置 <httpProtocol> <customH ...
- XVIII Open Cup named after E.V. Pankratiev. Grand Prix of Khamovniki Problem J Stairways解题报告(分块+维护凸壳)
首先ORZ一发Claris聚聚的题解:http://www.cnblogs.com/clrs97/p/8689215.html,不然我可能没机会补过这道神题了. 这里写一个更详细的题解吧(我还是太菜了 ...
- iOS-Cocoapods更新不及时
一.问题 使用cocoapods搜索某些库时,搜索到的版本低于Github上面的版本,这样会导致一些问题.例如我在使用一个LTNavigationBar这个库时,在我升级到iOS10的时候,会导致导航 ...
- pat 甲级 1034. Head of a Gang (30)
1034. Head of a Gang (30) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue One wa ...
- git常见操作总结
git config --global user.name "liyang"git config --global user.email "liyangslj@126.c ...
- Linux中的小括号和大括号,${}/$()/()/{}/${var:-string}/${var:=string}/${var:+string}/${var:?string}/${var%pattern}/${var#pattern}/${var%%pattern}/${var##pattern}
简单记录一下大小括号在Linux中的用处. 1.${var},这是Linux中变量的原形.所以$var,别忘记了你的本来面目. # a= # echo $a # echo ${a} # echo ${ ...