[BZOJ4416][Shoi2013]阶乘字符串 状态压缩dp
诶一直感觉这个数字特别大的时候会无解
然而一直没有把这个数算出来,觉得可能是大于一个数无解小于一个数暴力
然而看题解发现这个数字是2121
正解先特判nn是否大于2121,若大于puts no
否则进行状态压缩dp,F[mask]F[mask]表示最短的前缀,能满足以mask为字符集合的阶乘字符串
若F[mask]<=mF[mask] 有解否则无解
/**************************************************************
Problem: 4416
User: di4CoveRy
Language: C++
Result: Accepted
Time:3420 ms
Memory:24780 kb
****************************************************************/#include <iostream>
#include <cstdio>
#include <cstring>#define tp ((1<<n)-1)
#define INF 2147483647#define N 505
#define MASK 6000000using namespace std;int F[MASK],g[N][27],n,len;
char s[N];
inline void ut(int &x,int y) { x = max(x,y); }
void solve() {
scanf("%d%s",&n,s+1);
if (n > 21) return (void)puts("NO");
len = strlen(s+1);
memset(F,0,sizeof(F));
for (int _=1;_<=n;_++) g[len][_] = g[len+1][_] = len+1;
for (int _=len;_>=1;_--) { memcpy(g[_-1],g[_],sizeof(g[_]));
g[_-1][ s[_]-'a'+1 ] = _;
}
for (int _=1;_<=tp;_++)
for (int i=1;i<=n;i++) if (_&(1<<(i-1)))
ut(F[_],g[ F[_^(1<<(i-1))] ][i]);
F[tp]<=len ? puts("YES") : puts("NO");
}int main() {
int T=0; scanf("%d",&T);
while (T--) solve();
return 0;
}
[BZOJ4416][Shoi2013]阶乘字符串 状态压缩dp相关推荐
- BZOJ4416: [Shoi2013]阶乘字符串
BZOJ4416: [Shoi2013]阶乘字符串 状压dp 题解: 据说n>21n>21无解? 据说合法的串最短是O(n2)O(n^2)级别的? 不知道... 对于n<=21n的情 ...
- BZOJ4416 [Shoi2013]阶乘字符串
鬼畜题啊-- 上来看错题,看成子串,n>=6直接无解,n<=5直接暴力,然后狂WA,发现看错题了 然后就跪了,只好上网找题解,然后看到了一个非常厉害的结论:当n>21的时候无解! 好 ...
- 第 256 场力扣周赛(状态压缩+dp,二进制子序列的动规、940)
第 256 场力扣周赛 有事没做,来看一下题 5854. 学生分数的最小差值 题目描述 给你一个 下标从 0 开始 的整数数组 nums ,其中 nums[i] 表示第 i 名学生的分数.另给你一个整 ...
- 0x56. 动态规划 - 状态压缩DP(习题详解 × 7)
目录 Problem A. 最短Hamilton路径 ProblemB. 蒙德里安的梦想 Problem C. Corn Fields Problem D. 小国王 Problem E. 炮兵阵地 P ...
- POJ 2411 Mondriaan‘s Dream(最清楚好懂的状压DP讲解)(连通性状态压缩DP)
poj 2411 Mondriaan's Dream(最清晰的状压DP解析) 闫氏DP大法好 我们这里是一列一列地来,因为是一个棋盘性的状态压缩DP,从哪个方向都一样 摆放的小方格总方案数 等价于 横 ...
- BZOJ1688|二进制枚举子集| 状态压缩DP
Disease Manangement 疾病管理 Description Alas! A set of D (1 <= D <= 15) diseases (numbered 1..D) ...
- hdu1074 状态压缩dp+记录方案
题意: 给你一些作业,每个作业有自己的结束时间和花费时间,如果超过结束时间完成,一天扣一分,问你把n个作业完成最少的扣分,要求输出方案. 思路: 状态压缩dp,记录方案数的地方 ...
- FZU-2218 Simple String Problem(状态压缩DP)
原题地址: 题意: 给你一个串和两个整数n和k,n表示串的长度,k表示串只有前k个小写字母,问你两个不含相同元素的连续子串的长度的最大乘积. 思路: 状态压缩DP最多16位,第i位的状态表示第i位字母 ...
- 《算法竞赛进阶指南》打卡-基本算法-AcWing 91. 最短Hamilton路径:位运算、状态压缩dp、dp
文章目录 题目解答 题目链接 题目解答 分析: 状态压缩dp是用二进制数来表示状态. 数据范围n = 20, 那么状态总量就是2202^{20}220个状态. 可以按照以下思路去思考: 哪些点被用过 ...
最新文章
- springboot 定时任务schedule
- set和multiset容器
- 树莓派i2c python_树莓派2 python i2cPython中chr、unichr、ord字符函数之间的对比
- 解决-bash: make: command not found安装提示错误
- python 关于字节串和字符串
- 大厂Java岗面试心得记录
- 要想选到音质好的耳机,你应该需要知道这些~
- php拖拽上传大文件,如何实现文件拖拽上传
- selenium 问题:OSError: [WinError 6] 句柄无效
- 为何你就是那个求职困难户?
- 计算机无法使用64位itunes,电脑itunes读iphone不了的解决方法
- java清空表格怎么实现_Java 创建、删除、操作PPT中的表格
- 关于Toast的一些常见操作
- 淘宝订单导出到excel_将产品添加到Excel订单
- Nvidia显卡驱动下载
- 一个手机游戏服务器的架构
- pc端微信分享(不是直接分享)
- 阿里巴巴P8自爆:Java八大核心思维导图知识梳理
- 【Matlab】Matlab作图的一些小知识
- CCS导入项目后中文是乱码