agc024F Simple Subsequence Problem

  • 给若干个01串,求一个最长的01串使得它是至少 m m m个给出01串的子序列。

  • 在长度最长的情况下求输出字典序最小的01串。

  • ∣ s ∣ ≤ 20 |s|\le20 ∣s∣≤20.

Solution

  • 感觉这种题目就没有什么性质,只能暴力了。
  • 问题是怎么暴力。
  • 不妨考虑前面已经枚举了一个子序列,那么对于所有串尽可能地匹配,一开始我想记每一个串匹配到的位置,但是由于值域很小,只有 2 20 2^{20} 220,我们可以状压后面剩下的串!
  • 那么记 f [ S ] [ T ] f[S][T] f[S][T]表示前面已经枚举的子序列是 S S S,匹配这个子序列剩下 T T T的有 f [ S ] [ T ] f[S][T] f[S][T]个。
  • 直接枚举下一个选择 0 / 1 0/1 0/1转移即可。
  • 状态数是 2 n n 2^nn 2nn的,时空复杂度 O ( 2 n n ) O(2^nn) O(2nn)
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<cstring>
#define maxn 21
using namespace std;int n,m,i,j,k,l,ans,anslen;
int f[2][maxn][1<<maxn],nx[2][maxn][1<<maxn];int main(){freopen("ceshi.in","r",stdin);scanf("%d%d",&n,&m); char ch=getchar();for(i=0;i<=n;i++){while (ch<'0'||ch>'1') ch=getchar();for(j=0;j<1<<i;j++) f[0][i][j]=ch-'0',ch=getchar();}for(i=0;i<n;i++) for(j=0;j<1<<i;j++) for(k=0;k<2;k++) for(int t=0;t<2;t++){if (k==t) nx[t][i+1][j|(k<<i)]=i+1;else nx[t][i+1][j|(k<<i)]=nx[t][i][j];}for(i=0;i<=n;i++){int p=i&1,q=p^1;for(j=0;j<1<<i;j++){int s=0;for(k=0;i+k<=n;k++) for(int S=0;S<1<<k;S++) if (f[p][k][j<<k|S])s+=f[p][k][j<<k|S];if (s>=m&&i>anslen) ans=j,anslen=i;}if (i==n) break;for(j=0;i+1+j<=n;j++) memset(f[q][j],0,sizeof(int)*((1<<i+j+1)+1));for(j=1;i+j<=n;j++) for(k=0;k<1<<i+j;k++) if (f[p][j][k]){int S=k^(k>>j<<j);for(int t=0;t<2;t++) if (nx[t][j][S]) {l=nx[t][j][S]-1;f[q][l][(k>>j<<1^t)<<l|(S^(S>>l<<l))]+=f[p][j][k];}}}for(i=anslen;i>=1;i--) putchar('0'+(ans>>i-1&1));
}

agc024F Simple Subsequence Problem相关推荐

  1. AtCoder AGC024F Simple Subsequence Problem (字符串、DP)

    题目链接 https://atcoder.jp/contests/agc024/tasks/agc024_f 题解 考虑对每个串都求出它是几个给定的串的子序列. 在 \(O(4^n)\) 暴力的基础上 ...

  2. BZOJ 3489: A simple rmq problem

    3489: A simple rmq problem Time Limit: 40 Sec  Memory Limit: 600 MB Submit: 1594  Solved: 520 [Submi ...

  3. FZYZ-2071 A Simple Math Problem IX

    P2071 -- A Simple Math Problem IX 时间限制:1000MS      内存限制:262144KB 状态:Accepted      标签:    数学问题-博弈论    ...

  4. A Simple Math Problem(2020 ICPC 江西省省赛)

    A Simple Math Problem ∑i=1n∑j=1if(j)[gcd(i,j)=1]∑i=1n∑j=inf(i)[gcd(i,j)=1]∑i=1n∑j=1nf(i)[gcd(i,j)=1] ...

  5. BZOJ3489 A simple rmq problem 【可持久化树套树】*

    BZOJ3489 A simple rmq problem Description 因为是OJ上的题,就简单点好了.给出一个长度为n的序列,给出M个询问:在[l,r]之间找到一个在这个区间里只出现过一 ...

  6. 【BZOJ3489】A simple rmq problem kd-tree

    [BZOJ3489]A simple rmq problem Description 因为是OJ上的题,就简单点好了.给出一个长度为n的序列,给出M个询问:在[l,r]之间找到一个在这个区间里只出现过 ...

  7. A Simple Math Problem 矩阵打水题

    A Simple Math Problem Lele now is thinking about a simple function f(x). If x < 10 f(x) = x. If x ...

  8. A Simple Math Problem题目翻译

    A Simple Math Problem | JXNUOJhttps://acs.jxnu.edu.cn/problem/ICPCJX2020A 描述: Huanhuan challenges yo ...

  9. 1.24A Simple Math Problem

    原网址:https://acs.jxnu.edu.cn/problem/NOIOPJCH02077215 描述: Huanhuan challenges you to a simple math pr ...

最新文章

  1. 汇编: mul乘法指令
  2. 关于java.nio.Buffer的API
  3. 获取数据 - 将Excel文件读入矩阵matrix中 - Python代码
  4. 更新macOS Monterey后遇到的各种Bug问题及解决方法
  5. 如何在ngRepeat中使用Bootstrap Span元素
  6. python杨辉三角编程_Python基础练习实例49(打印杨辉三角)
  7. transform 二维转变
  8. 感觉最近有多个机器人给吾博客评论
  9. 【转】多态与 new [C#]
  10. 以太网帧各字段的含义_车载以太网(上)
  11. hive sql总结汇总
  12. 最简行阶梯矩阵生成器
  13. 不存在开发板或没有链接_手把手教你搭建织女星开发板RISC-V开发环境
  14. 人工智能应用实例:图片降噪
  15. 啤酒和尿布:一文看懂关联规则
  16. java计算机毕业设计乐多多宠物店网站源代码+数据库+系统+lw文档
  17. 删除末尾带.的文件夹
  18. 前端学HTTP之web攻击技术
  19. 【pyqt】自制的图片裁剪分割器
  20. 一个软件,解决全能电子地图制作

热门文章

  1. Linux:僵尸进程 Zombie;waitpid
  2. VUE中使用高德地图.做个轨迹添加器,为路线规划做数据
  3. 深度 | 实景三维与CIM,谁才是时空数据第一底板 三维视频融合 三维投影融合 时空克隆 点卯-魔镜系列
  4. JAVA对接短信通知接口
  5. SVG 图标格式文件去除文件默认颜色
  6. cgb2007-京淘day02
  7. H5实时上传位置定位 pc生成轨迹;h5保持后台运行
  8. 手把手教你用Unet实现语义分割(Pytorch版)
  9. ERROR 1010 (HY000): Error dropping database (can‘t rmdir ‘.\qpweb‘, errno: 41) 删库失败问题的解决
  10. 猫眼电影经典电影爬取