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

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

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

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

 #include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int d[<<];
int main(){
int t,n,k;
char str[];
scanf("%d",&t);
while(t--){
scanf("%d%d%s",&n,&k,str);
memset(d,,sizeof(d));
for(int i=; i<n; ++i){
int s=;
for(int j=i; j<n; ++j){
s|=<<str[j]-'a';
d[s]=max(d[s],j-i+);
}
}
for(int i=; i<(<<k); ++i){
for(int j=; j<k ;++j){
if((i>>j)&) d[i]=max(d[i],d[i&(~(<<j))]);
}
}
int res=;
for(int i=; i<(<<k); ++i){
res=max(res,d[i]*d[(~i)&((<<k)-)]);
}
printf("%d\n",res);
}
return ;
}

FZU2218 Simple String Problem(状压DP)的更多相关文章

  1. FZU - 2218 Simple String Problem 状压dp

    FZU - 2218Simple String Problem 题目大意:给一个长度为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 题目大意 给出\(n\)个点\(m\)条边的一张简单无向图,求它的简单环的个数. \(1\leq n\le ...

  5. fzu2218 Simple String Problem

    Accept: 2    Submit: 16 Time Limit: 2000 mSec    Memory Limit : 32768 KB  Problem Description Recent ...

  6. cf 11D A Simple Task(状压DP)

    题意: N个点构成的无向图,M条边描述这个无向图. 问这个无向图中共有多少个环. (1 ≤ n ≤ 19, 0 ≤ m) 思路: 例子: 4 6 1 2 1 3 1 4 2 3 2 4 3 4 答案: ...

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

    Simple String Problem Recently, you have found your interest in string theory. Here is an interestin ...

  8. zoj3777 Problem Arrangement(状压dp,思路赞)

    The 11th Zhejiang Provincial Collegiate Programming Contest is coming! As a problem setter, Edward i ...

  9. poj3311 TSP经典状压dp(Traveling Saleman Problem)

    题目链接:http://poj.org/problem?id=3311 题意:一个人到一些地方送披萨,要求找到一条路径能够遍历每一个城市后返回出发点,并且路径距离最短.最后输出最短距离即可.注意:每一 ...

随机推荐

  1. Socket 多线程FTP软件开发

    Socket具体还可见360云中文档记载 Socket是一个非常古老的协议了 1970年 Socket.AF_Unix======AF意思是  addressFamily 地址簇 Import os ...

  2. WeakReference(弱引用)

    原地址:http://www.cnblogs.com/bayonetxxx/archive/2009/06/02/1494728.html 我们平常用的都是对象的强引用,如果有强引用存在,GC是不会回 ...

  3. 使用Cydia Substrate 从Native Hook Android Native世界

    同系列文章: 使用Cydia Substrate 从Native Hook Android Java世界 使用Cydia Substrate Hook Android Java世界 一.建立工程 手机 ...

  4. Windows Server 2012 GUI与Core的切换

    Server Core是在Windows Server 2008 系统上开始引入的极小的服务器安装选项,server core 的作用就是为特定的服务提供一个可执行的功能有限的低维护服务器环境,为我们 ...

  5. 【Hibernate】Hibernate系列1之概述

    概述 Hibernate简介 1.2.安装hibernate tools插件 1.3.HelloWorld示例 1.3.1.加入jar包 1.3.2.开发步骤 hibernate generator ...

  6. HashMap实现原理分析(详解)

    1. HashMap的数据结构 http://blog.csdn.net/gaopu12345/article/details/50831631   ??看一下 数据结构中有数组和链表来实现对数据的存 ...

  7. C++代码重用——包含

    #ifndef PAIRS_H #define PAIRS_H #include <iostream> #include <valarray> template <cla ...

  8. JSON: property "xxx" has no getter method in class "..."

    Exception in thread "main" net.sf.json.JSONException: java.lang.NoSuchMethodException: Pro ...

  9. Java用Scanner类获取用户输入

    用Java编写程序时,有些数据需要用户输入,这个时候需要调用java提供的Scanner类,这个类在包java.util下,比如求一个矩形的面积,简单的看一下用法: import java.util. ...

  10. CPinyin unicode汉字查找拼音(支持多音字)

    下载代码 --------------------------------------------------------------------------------- 虽然很笨的办法,却非常有效 ...