首先,定义S,表示前k个字符出现的集合,用二进制来压缩。

接下来,推出dp1[S],表示集合为S的子串的最长长度。

然后根据dp1[S]再推出dp2[S],表示集合为S或S的子集的子串的最长长度。

最后答案就是max(dp2[S]*dp2[补(S)])

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<algorithm>
 4 using namespace std;
 5 int d[1<<16];
 6 int main(){
 7     int t,n,k;
 8     char str[2222];
 9     scanf("%d",&t);
10     while(t--){
11         scanf("%d%d%s",&n,&k,str);
12         memset(d,0,sizeof(d));
13         for(int i=0; i<n; ++i){
14             int s=0;
15             for(int j=i; j<n; ++j){
16                 s|=1<<str[j]-'a';
17                 d[s]=max(d[s],j-i+1);
18             }
19         }
20         for(int i=0; i<(1<<k); ++i){
21             for(int j=0; j<k ;++j){
22                 if((i>>j)&1) d[i]=max(d[i],d[i&(~(1<<j))]);
23             }
24         }
25         int res=0;
26         for(int i=0; i<(1<<k); ++i){
27             res=max(res,d[i]*d[(~i)&((1<<k)-1)]);
28         }
29         printf("%d\n",res);
30     }
31     return 0;
32 }

转载于:https://www.cnblogs.com/WABoss/p/5092266.html

FZU2218 Simple String Problem(状压DP)相关推荐

  1. FZU - 2218 Simple String Problem(状压dp)

    题目链接:点击查看 题目大意:给出一个长度为n,含有k个不同字母的字符串,我们的任务是从中挑选出两段连续的子串,要求其长度的乘积最大,还有一个限制条件是,这两个子串不能互相包含相同的字母 题目分析:因 ...

  2. FZU-2218 Simple String Problem(状态压缩DP)

    原题地址: 题意: 给你一个串和两个整数n和k,n表示串的长度,k表示串只有前k个小写字母,问你两个不含相同元素的连续子串的长度的最大乘积. 思路: 状态压缩DP最多16位,第i位的状态表示第i位字母 ...

  3. CF11D A Simple Task(状压DP)

    \(solution:\) 思路大家应该都懂: 状压DP:\(f[i][j]\),其中 \(i\) 这一维是需要状压的,用来记录19个节点每一个是否已经走过(走过为 \(1\) ,没走为 \(0\) ...

  4. CF11D-A Simple Task【状压dp】

    正题 题目链接:https://www.luogu.com.cn/problem/CF11D 题目大意 给出nnn个点mmm条边的一张简单无向图,求它的简单环的个数. 1≤n≤191\leq n\le ...

  5. 【校内互测】Sunshine’s string(merge) (状压dp)

    Sunshine's string(merge.cpp) [问题描述] 无聊的Sunshine大爷开始研究字符串.他找来了一个长度为n的01字符串,并制定了一些规则:每次可以将k个字符合并,得到一个新 ...

  6. 【思维题 状压dp】APC001F - XOR Tree

    可能算是道中规中矩的套路题吧-- Time limit : 2sec / Memory limit : 256MB Problem Statement You are given a tree wit ...

  7. CodeForces - 1550E Stringforces(二分+状压dp)

    题目链接:点击查看 题目大意:给出一个长度为 nnn 的字符串,只包含前 kkk 个小写字母以及通配符 ???,现在可以将通配符替换成任意的前 kkk 个字母中的一个.设 f[i]f[i]f[i] 为 ...

  8. 【2019牛客暑期多校训练营(第五场)- E】independent set 1(最大独立集,状压dp)

    题干: 链接:https://ac.nowcoder.com/acm/contest/885/E 来源:牛客网 Note: For C++ languages, the memory limit is ...

  9. Codeforces Beta Round #8 C. Looking for Order 状压dp

    题目链接: http://codeforces.com/problemset/problem/8/C C. Looking for Order time limit per test:4 second ...

最新文章

  1. 计算机和人类“看”法不同,但这重要么?
  2. JavaScript多态
  3. POJ3322滚箱子游戏(不错)
  4. Weblogic服务端请求伪造漏洞(SSRF)和反射型跨站请求伪造漏洞(CSS)修复教程...
  5. [JS-DOM]DOM概述
  6. 纯html5+css3能写出什么惊人效果?
  7. 鸿蒙手机播放音乐-第一集
  8. virt_to_page
  9. 齿轮刚度计算 matlab,数值积分求解齿轮刚度
  10. Centos7安装nxlog-2.9
  11. 8个免费查找文献的学术网站
  12. 余世伟视频笔记----如何塑造管理者的性格魅力领袖根性之诚信和担当
  13. 拥抱认知革命:区块链时代已至,临渊羡鱼不若自我革新
  14. 计算机中ram中文意思,ram是什么_ram是什么意思-太平洋IT百科
  15. 关于 PCB 多层板制程能力不得不说的那些事儿
  16. 震惊!AI居然轻松消除马赛克-文字增强,GitHub开源项目上线三天收获近7000星
  17. 【Linux】yum install cmake 报错,出现错误ImportError: No module named urlgrabber.grabber
  18. n阶魔方的构成方法C语言,穷举法打印n阶魔方矩阵
  19. Android微信页面缓存清理,安卓微信浏览器缓存如何清理
  20. Ubuntu16.04 rc.local不生效,启动过程中报“Failed to start /etc/rc.local Compatibility”错误

热门文章

  1. directshow-faac编码
  2. lua执行shell命令6_Vim执行shell命令及使用Vim批量更改文件名
  3. 《转》ReentrantLock实现原理深入探究
  4. 如何安装python3.8_Python安装1 —— Python3.8的安装
  5. 【IDEA】IDEA 设置 字体 可以滚轮 改变大小
  6. 【clickhouse】Application: DB::Exception: Duplicate interserver IO endpoint: DataPartsExchange
  7. 【Elasticsearch】Elasticsearch 7.3 的 offheap 原理
  8. 【Flink】Flink 报错 Hash join exceeded Too many duplicate keys
  9. 【Spring】Spring 自定义scope
  10. 【Hbase】HBase的shell命令总结