诶一直感觉这个数字特别大的时候会无解
然而一直没有把这个数算出来,觉得可能是大于一个数无解小于一个数暴力
然而看题解发现这个数字是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相关推荐

  1. BZOJ4416: [Shoi2013]阶乘字符串

    BZOJ4416: [Shoi2013]阶乘字符串 状压dp 题解: 据说n>21n>21无解? 据说合法的串最短是O(n2)O(n^2)级别的? 不知道... 对于n<=21n的情 ...

  2. BZOJ4416 [Shoi2013]阶乘字符串

    鬼畜题啊-- 上来看错题,看成子串,n>=6直接无解,n<=5直接暴力,然后狂WA,发现看错题了 然后就跪了,只好上网找题解,然后看到了一个非常厉害的结论:当n>21的时候无解! 好 ...

  3. 第 256 场力扣周赛(状态压缩+dp,二进制子序列的动规、940)

    第 256 场力扣周赛 有事没做,来看一下题 5854. 学生分数的最小差值 题目描述 给你一个 下标从 0 开始 的整数数组 nums ,其中 nums[i] 表示第 i 名学生的分数.另给你一个整 ...

  4. 0x56. 动态规划 - 状态压缩DP(习题详解 × 7)

    目录 Problem A. 最短Hamilton路径 ProblemB. 蒙德里安的梦想 Problem C. Corn Fields Problem D. 小国王 Problem E. 炮兵阵地 P ...

  5. POJ 2411 Mondriaan‘s Dream(最清楚好懂的状压DP讲解)(连通性状态压缩DP)

    poj 2411 Mondriaan's Dream(最清晰的状压DP解析) 闫氏DP大法好 我们这里是一列一列地来,因为是一个棋盘性的状态压缩DP,从哪个方向都一样 摆放的小方格总方案数 等价于 横 ...

  6. BZOJ1688|二进制枚举子集| 状态压缩DP

    Disease Manangement 疾病管理 Description Alas! A set of D (1 <= D <= 15) diseases (numbered 1..D) ...

  7. hdu1074 状态压缩dp+记录方案

    题意:       给你一些作业,每个作业有自己的结束时间和花费时间,如果超过结束时间完成,一天扣一分,问你把n个作业完成最少的扣分,要求输出方案. 思路:       状态压缩dp,记录方案数的地方 ...

  8. FZU-2218 Simple String Problem(状态压缩DP)

    原题地址: 题意: 给你一个串和两个整数n和k,n表示串的长度,k表示串只有前k个小写字母,问你两个不含相同元素的连续子串的长度的最大乘积. 思路: 状态压缩DP最多16位,第i位的状态表示第i位字母 ...

  9. 《算法竞赛进阶指南》打卡-基本算法-AcWing 91. 最短Hamilton路径:位运算、状态压缩dp、dp

    文章目录 题目解答 题目链接 题目解答 分析: 状态压缩dp是用二进制数来表示状态. 数据范围n = 20, 那么状态总量就是2202^{20}220个状态. 可以按照以下思路去思考: 哪些点被用过 ...

最新文章

  1. springboot 定时任务schedule
  2. set和multiset容器
  3. 树莓派i2c python_树莓派2 python i2cPython中chr、unichr、ord字符函数之间的对比
  4. 解决-bash: make: command not found安装提示错误
  5. python 关于字节串和字符串
  6. 大厂Java岗面试心得记录
  7. 要想选到音质好的耳机,你应该需要知道这些~
  8. php拖拽上传大文件,如何实现文件拖拽上传
  9. selenium 问题:OSError: [WinError 6] 句柄无效
  10. 为何你就是那个求职困难户?
  11. 计算机无法使用64位itunes,电脑itunes读iphone不了的解决方法
  12. java清空表格怎么实现_Java 创建、删除、操作PPT中的表格
  13. 关于Toast的一些常见操作
  14. 淘宝订单导出到excel_将产品添加到Excel订单
  15. Nvidia显卡驱动下载
  16. 一个手机游戏服务器的架构
  17. pc端微信分享(不是直接分享)
  18. 阿里巴巴P8自爆:Java八大核心思维导图知识梳理
  19. 【Matlab】Matlab作图的一些小知识
  20. CCS导入项目后中文是乱码

热门文章

  1. Python——保存图片到本地
  2. jQuery 中的 end 方法
  3. Oracle安装之1521端口及任何端口被占用错误
  4. Android Studio打包apk详细教程
  5. WIN10安装postgresql启动服务失败解决
  6. docker容器创建
  7. 在vim中写python程序_在Vim中运行Python代码
  8. Leetcode题库1823. 找出游戏的获胜者(约瑟夫环 C实现)
  9. 正则表达式的含义于简介
  10. shell正则表达式(cut、sort、uniq、tr、paste)小工具