题意:

给出长为n的字符串,含有前k种小写字母,求两个不含重复元素的连续子串,使得他们的长度乘积最大。

思路:

字符种类16 ->(套路) 状压

暴力2000*2000得所有连续子串的长度,得每个状态的最优;

dp使得包含字符个数最优。

利用异或取反得最大值。

#include<cstdio>
#include<string.h>
#include<algorithm>
using namespace std;
const int N=1<<16;
char s[2010];
int dp[N];
int n,k; void init()
{
int val;
memset(dp,0,sizeof(dp));
for(int i=0; i<n; i++)
{
val=0;
for(int j=i; j<n; j++)
{
val|=(1<<(s[j]-'a'));
dp[val]=max(dp[val],j-i+1);
}
}
} int main()
{
int T;
scanf("%d",&T);
while(T--)
{
scanf("%d%d",&n,&k);
scanf("%s",s);
init();
for(int i=0; i<(1<<k); i++)
for(int j=0; j<k; j++)
if(i&(1<<j))
dp[i]=max(dp[i],dp[i^(1<<j)]);
int ans=0;
for(int i=0; i<(1<<k); i++)
ans=max(dp[i]*dp[((1<<k)-1)^i],ans);
printf("%d\n",ans);
}
return 0;
}

最新文章

  1. php二维数组按照键值排序的方法
  2. a questions
  3. [UDP] UDP 报文数据(CoAP protocol)
  4. mysql-mysql悲观锁和乐观锁
  5. Mysql之复制选项与监控
  6. ASP.NET学习笔记1—— MVC
  7. git 使用笔记
  8. Fresco 源码分析(二) Fresco客户端与服务端交互(2) Fresco.initializeDrawee()分析 续
  9. (26)odoo中的序列运用
  10. POJ 2253 Frogger (dijkstra 最大边最小)
  11. ORACLE之PACKAGE
  12. 将excel的.xlsx文件转成数据库文件.db的方法
  13. android 后台运行
  14. Java单例模式的各种实现(饿汉、懒汉、静态内部类、static代码块、enum枚举类型)
  15. Codeforces 1077F1 Pictures with Kittens (easy version)(DP)
  16. JQuery元素控制方法汇总
  17. ios 自定义UITableView中分组的标题sectionview
  18. Oracle AWR日志使用
  19. 解决 :java -version出现错误:“could not open `C:\Program Files\Java\jre7\lib\amd64\jvm.cfg”
  20. Requests接口测试(五)

热门文章

  1. python使用记录
  2. 错误: 非法字符: &#39;\ufeff&#39; 解决方案|错误: 需要class, interface或enum
  3. CentOS7的yum安装mysql
  4. Redmine后台修改admin密码
  5. math worksheet作业纸生成器
  6. 修复升级ndk到17.0.4754217编译so失败问题
  7. 在js实现矩阵转置
  8. 练习E-R图书管理数据库
  9. darknet YOLOv2安装及数据集训练
  10. CSS 浏览器兼容