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