P3989 [SHOI2013]阶乘字符串 题解
由于一些不可抗拒的原因,
那么只用考虑
由于
设
那么对于任何一位
因为本集合中的所有情况都得满足,所以下标得取最大值。
那么我们只需预处理出来
从后往前枚举,本位的
预处理出来,然后状压 dp,dp 时对每个状态枚举
详细看代码。
希望有大佬可以指明下为何
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
char s[505];
int n,vis[505][26],f[1<<21];
int main()
{
freopen("factorial.in","r",stdin);
freopen("factorial.out","w",stdout);
int T;
scanf("%d",&T);
while(T--)
{
memset(vis,0,sizeof(vis));
memset(f,0,sizeof(f));
scanf("%d",&n);
scanf("%s",s+1);
if(n>21)
{
printf("NO\n");
continue;
}
int len=strlen(s+1);
for(int i=0;i<n;i++)vis[len][i]=vis[len+1][i]=len+1;
for(int i=len-1;i>=0;i--)
{
for(int j=0;j<n;j++)vis[i][j]=vis[i+1][j];
vis[i][s[i+1]-'a']=i+1;
}
for(int i=0;i<1<<n;i++)
{
for(int j=0;j<n;j++)
{
if(i&(1<<j))
{
f[i]=max(f[i],vis[f[i^(1<<j)]][j]);
}
}
}
if(f[(1<<n)-1]!=len+1)printf("YES\n");
else printf("NO\n");
}
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?