题目链接  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预处理 + 枚举剪枝)的更多相关文章

  1. 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}$, 并且能被 ...

  2. 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 ...

  3. Gym 101194F Mr. Panda and Fantastic Beasts

    #include<bits/stdc++.h> using namespace std; #define ms(arr,a) memset(arr,a,sizeof arr) #defin ...

  4. LOJ 2292 「THUSC 2016」成绩单——区间DP

    题目:https://loj.ac/problem/2292 直接 DP 很难做,主要是有那种 “一个区间内部有很多个别的区间” 的情况. 自己想了一番枚举 max-min 的最大限制,然后在该基础上 ...

  5. Gym - 101670F Shooting Gallery(CTU Open Contest 2017 区间dp)

    题目&题意:(有点难读...) 给出一个数字序列,找出一个区间,当删除这个区间中的两个相同的数字后,只保留这两个数字之间的序列,然后继续删除相同的数字,问最多可以实行多少次删除操作. 例如: ...

  6. 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 ...

  7. Codeforces Gym 100002 Problem F "Folding" 区间DP

    Problem F "Folding" Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/ ...

  8. Codeforces Gym 101252D&&floyd判圈算法学习笔记

    一句话题意:x0=1,xi+1=(Axi+xi%B)%C,如果x序列中存在最早的两个相同的元素,输出第二次出现的位置,若在2e7内无解则输出-1. 题解:都不到100天就AFO了才来学这floyd判圈 ...

  9. Codeforces Gym 101190M Mole Tunnels - 费用流

    题目传送门 传送门 题目大意 $m$只鼹鼠有$n$个巢穴,$n - 1$条长度为$1$的通道将它们连通且第$i(i > 1)$个巢穴与第$\left\lfloor \frac{i}{2}\rig ...

随机推荐

  1. DFS:HDU1518-Square(剪枝较多的DFS)

    题目: Square Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Tota ...

  2. 数论:HDU1066-Last non-zero Digit in N!

    题目: Last non-zero Digit in N! Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K ...

  3. nova hypervisor接口添加host_ip字段

    云平台系统用户提出一个需求,要求根据物理机主机名或者IP查询其上虚拟机列表.根据主机名查询好办,nova的list接口提供了host参数:按主机IP查询就不那么直接了,需要先将IP反解析成主机名,然后 ...

  4. Python+Selenium练习篇之15-在浏览器中新开一个tab

    本文介绍如selenium方法打开一个新的tab,我们知道在浏览器里,我们按住 ctrl+ t 就可以新打开一个tab.所以我们学习如何利用webdriver中send_key 的方法去触发ctrl+ ...

  5. 01背包 HDU-1203

    这道题在网上找的题解基本都是用min找出概率最小,然后用1减去的答案,我在这采用max来做,虽然只是换了公式,但是其中出现的问题还是想记录下. I NEED A OFFER! Time Limit: ...

  6. URL 传参中需要处理的特殊字符

    例如实际请求URL如下: http://www.douwansha.com/mdeditor?data=[{"address":null,"name":&quo ...

  7. ibatis核心内容概述

    核心提示:SqlMap的配置是iBatis中应用的核心.这部分任务占据了iBatis开发的70的工作量. 1.命名空间: sqlMap namespace=Account,在此空间外要引用此空间的元素 ...

  8. EasyUi DataGrid 获取选中行的checkbox

    EasyUi DataGrid 获取选中行的checkbox var checked = $(":checkbox[name=ID]:checked"); console.log( ...

  9. LAMP第三部分php配置和mysql配置

    9. 配置防盗链http://www.lishiming.net/thread-71-1-1.html 防止别人的网站,放你网站图片的链接, 位置一般情况下在 /usr/local/apache/co ...

  10. httpClient get方式抓取数据

    /*     * 爬取网页信息     */    private static String pickData(String url) {        CloseableHttpClient ht ...