codeforces#1234F. Yet Another Substring Reverse(子集dp)
题目链接:
https://codeforces.com/contest/1234/problem/F
题意:
给出一个只包含前20个小写字母的字符串,一次操作可以让一段字符颠倒顺序
最多一次这样的操作,让不出现相同字符的子串最长,求出最长长度
数据范围:
$1\leq |S| \leq 1000 000$
分析:
定义$dp[i]$代表,最多出现这些字符的连续串的最大长度
$i$是二进制状态枚举,某位有1,则可以出现这个字符
状态转移看代码
$ans=max(dp[i]+dp[1<<20-1-i],ans)$
AC代码:
#include<bits/stdc++.h>
#define ll long long
#define pic pair<int,char>
#define pii pair<int,int>
using namespace std;
const int maxn=1e6+7;
char S[maxn];
int dp[1<<20];
int main(){
scanf("%s",S+1);
int len=strlen(S+1);
for(int i=1;i<=len;i++){
int mask=0;
for(int j=i;j<=len;j++){
int v=S[j]-'a';
if(mask&(1<<v))break;
mask=mask^(1<<v);
dp[mask]=j-i+1;
// cout<<j-i+1<<endl;
}
}
for(int p=0;p<20;p++)
for(int mask=0;mask<(1<<20);mask++)
if((mask&(1<<p))==0)
dp[mask^(1<<p)]=max(dp[mask^(1<<p)],dp[mask]);
int ans=0;
for(int i=0;i<(1<<20);i++)ans=max(ans,dp[i]+dp[(1<<20)-1-i]);
printf("%d\n",ans);
return 0;
}
codeforces#1234F. Yet Another Substring Reverse(子集dp)的更多相关文章
- [CF1234F] Yet Another Substring Reverse - 字符串,状压DP
CF1234F Yet Another Substring Reverse Description 给定一个字符串,可以任意翻转一个子串,求最终满足所有字符互不相同的子串的最大长度. 数据范围: \( ...
- Codeforces 219D. Choosing Capital for Treeland (树dp)
题目链接:http://codeforces.com/contest/219/problem/D 树dp //#pragma comment(linker, "/STACK:10240000 ...
- [BZOJ4416][SHOI2013]阶乘字符串(子集DP)
怎么也没想到是子集DP,想到了应该就没什么难度了. 首先n>21时必定为NO. g[i][j]表示位置i后的第一个字母j在哪个位置,n*21求出. f[S]表示S的所有全排列子序列出现的最后末尾 ...
- loj 300 [CTSC2017]吉夫特 【Lucas定理 + 子集dp】
题目链接 loj300 题解 orz litble 膜完题解后,突然有一个简单的想法: 考虑到\(2\)是质数,考虑Lucas定理: \[{n \choose m} = \prod_{i = 1} { ...
- hdu 5823 color II —— 子集DP
题目:http://acm.hdu.edu.cn/showproblem.php?pid=5823 看博客:http://www.cnblogs.com/SilverNebula/p/5929550. ...
- BZOJ 4006 [JLOI2015]管道连接(斯坦纳树+子集DP)
明显是一道斯坦纳树的题. 然而这题只需要属性相同的点互相连接. 我们还是照常先套路求出\(ans[s]\). 然后对\(ans[s]\)做子集DP即可. 具体看代码. #include<iost ...
- BZOJ 2560(子集DP+容斥原理)
2560: 串珠子 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 757 Solved: 497[Submit][Status][Discuss] ...
- [CodeForces - 1272D] Remove One Element 【线性dp】
[CodeForces - 1272D] Remove One Element [线性dp] 标签:题解 codeforces题解 dp 线性dp 题目描述 Time limit 2000 ms Me ...
- E.Substring Reverse Gym - 101755E
Substring Reverse Problem Two strings s and t of the same length are given. Determine whether it is ...
随机推荐
- Java Web 深入分析(1)B/S架构概述
B/S结构即浏览器和服务器结构.它是随着Internet技术的兴起,对C/S结构的一种变化或者改进的结构.在这种结构下,用户工作界面是通过WWW浏览器来实现,极少部分事务逻辑在前端(Browser)实 ...
- ASP.NET WEB应用程序(.network4.5)MVC Razor视图引擎2 视图引用资源
https://www.cnblogs.com/Roxlin/p/5615144.html 一.配置BundleConfig.cs文件 1.首先要在App_Start 里面BundleConfig.c ...
- mysql8中查询语句表别名不能使用 “of”
今天在迁移一个项目的时候,发现有一个sql报错,但是语句跟迁移之前完全一样,所以想来应该是 mysql 版本差异导致的. 迁移之前版本:5.6.28(腾讯云) 迁移之后版本:8.0.16(阿里云) 新 ...
- Julia 学习
Julia 1.1 中文文档 Julia 中的数据可视化 --初探 一个简单的Julia教程(一) juliapro下载链接
- js对象转数组
1.Array.from() 方法,用于数组的浅拷贝.就是将一个类数组对象或者可遍历对象转换成一个真正的数组.eg: let obj = { 0: ‘nihao‘, 1: ‘haha‘, 2: ‘ga ...
- iOS - 解决警告“ld: Warning: Directory Not Found for Option”
有时候我们可能从项目中删除了某个目录.文件以后,编译出现警告信息: ld: warning: directory not found for option“XXXXXX” 具体类似下图: 很奇怪,为什 ...
- mongodb聚合查询-aggregate
Mongodb-aggregate 在工作中经常遇到一些mongodb的聚合操作,和mysql对比起来,mongo存储的可以是复杂的类型,比如数组,字典等mysql不善于处理的文档型结构,但是mong ...
- Django应用之content type(app应用之一django.contrib.contenttypes)
当一张表作为多个表的FK(主键),并且只能选择其中一个或者几个时,就可以使用content_type表:例如下图的数据关系,因此就可以使用content_type表来将表与表中的对象进行关联,从而做到 ...
- 模块化开发之sea.js
随着时间的推移,原生js越来越强大,es6中的improt,export已经可以实现模块化开发,但可惜的是现在的浏览器还不支持,需要进行编译,相信在不久的将来,一定会大行其道,今天我们来聊聊模块化开发 ...
- socket 实现一个类似简单聊天室的功能(多客户端互相通信)
server端: #coding=utf-8 ''' 一个广播程序,linux运行 ''' import select,socket import traceback def broadcast(co ...