agc024F Simple Subsequence Problem
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相关推荐
- AtCoder AGC024F Simple Subsequence Problem (字符串、DP)
题目链接 https://atcoder.jp/contests/agc024/tasks/agc024_f 题解 考虑对每个串都求出它是几个给定的串的子序列. 在 \(O(4^n)\) 暴力的基础上 ...
- BZOJ 3489: A simple rmq problem
3489: A simple rmq problem Time Limit: 40 Sec Memory Limit: 600 MB Submit: 1594 Solved: 520 [Submi ...
- FZYZ-2071 A Simple Math Problem IX
P2071 -- A Simple Math Problem IX 时间限制:1000MS 内存限制:262144KB 状态:Accepted 标签: 数学问题-博弈论 ...
- 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] ...
- BZOJ3489 A simple rmq problem 【可持久化树套树】*
BZOJ3489 A simple rmq problem Description 因为是OJ上的题,就简单点好了.给出一个长度为n的序列,给出M个询问:在[l,r]之间找到一个在这个区间里只出现过一 ...
- 【BZOJ3489】A simple rmq problem kd-tree
[BZOJ3489]A simple rmq problem Description 因为是OJ上的题,就简单点好了.给出一个长度为n的序列,给出M个询问:在[l,r]之间找到一个在这个区间里只出现过 ...
- 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 ...
- A Simple Math Problem题目翻译
A Simple Math Problem | JXNUOJhttps://acs.jxnu.edu.cn/problem/ICPCJX2020A 描述: Huanhuan challenges yo ...
- 1.24A Simple Math Problem
原网址:https://acs.jxnu.edu.cn/problem/NOIOPJCH02077215 描述: Huanhuan challenges you to a simple math pr ...
最新文章
- 汇编: mul乘法指令
- 关于java.nio.Buffer的API
- 获取数据 - 将Excel文件读入矩阵matrix中 - Python代码
- 更新macOS Monterey后遇到的各种Bug问题及解决方法
- 如何在ngRepeat中使用Bootstrap Span元素
- python杨辉三角编程_Python基础练习实例49(打印杨辉三角)
- transform 二维转变
- 感觉最近有多个机器人给吾博客评论
- 【转】多态与 new [C#]
- 以太网帧各字段的含义_车载以太网(上)
- hive sql总结汇总
- 最简行阶梯矩阵生成器
- 不存在开发板或没有链接_手把手教你搭建织女星开发板RISC-V开发环境
- 人工智能应用实例:图片降噪
- 啤酒和尿布:一文看懂关联规则
- java计算机毕业设计乐多多宠物店网站源代码+数据库+系统+lw文档
- 删除末尾带.的文件夹
- 前端学HTTP之web攻击技术
- 【pyqt】自制的图片裁剪分割器
- 一个软件,解决全能电子地图制作
热门文章
- Linux:僵尸进程 Zombie;waitpid
- VUE中使用高德地图.做个轨迹添加器,为路线规划做数据
- 深度 | 实景三维与CIM,谁才是时空数据第一底板 三维视频融合 三维投影融合 时空克隆 点卯-魔镜系列
- JAVA对接短信通知接口
- SVG 图标格式文件去除文件默认颜色
- cgb2007-京淘day02
- H5实时上传位置定位 pc生成轨迹;h5保持后台运行
- 手把手教你用Unet实现语义分割(Pytorch版)
- ERROR 1010 (HY000): Error dropping database (can‘t rmdir ‘.\qpweb‘, errno: 41) 删库失败问题的解决
- 猫眼电影经典电影爬取