P2167 [SDOI2009]Bill的挑战
sb状压dp。
设f[i][j]表示字符串前i位和集合为j的串匹配的方案数。
枚举哪个字母直接转移就好了。
(话说为啥这种水题都有紫色难度
#include<bits/stdc++.h>
#define il inline
#define vd void
#define mod 1000003
typedef long long ll;
il int gi(){
int x=0,f=1;
char ch=getchar();
while(!isdigit(ch)){
if(ch=='-')f=-1;
ch=getchar();
}
while(isdigit(ch))x=x*10+ch-'0',ch=getchar();
return x*f;
}
char _S[20][54];
ll f[52][1<<15];
int S[20][54],yes[53][27];
int cnt[1<<15];
int main(){
#ifndef ONLINE_JUDGE
freopen("2167.in","r",stdin);
freopen("2167.out","w",stdout);
#endif
int T=gi(),n,k,len,U;
for(int i=1;i<1<<15;++i)cnt[i]=cnt[i-(i&-i)]+1;
while(T--){
n=gi(),k=gi();U=(1<<n)-1;
memset(yes,0,sizeof yes);
for(int i=1;i<=n;++i){
scanf("%s",_S[i]+1);
if(i==1)len=strlen(_S[i]+1);
for(int j=1;j<=len;++j){
if(_S[i][j]=='?')S[i][j]=0;
else S[i][j]=_S[i][j]-'a'+1;
yes[j][S[i][j]]|=1<<i-1;
}
}
memset(f,0,sizeof f);
f[0][U]=1;
for(int i=0;i<len;++i)
for(int j=0;j<1<<n;++j)
if(f[i][j]){
f[i][j]%=mod;
for(int k=1;k<27;++k)f[i+1][j&(yes[i+1][k]|yes[i+1][0])]+=f[i][j];
}
ll ans=0;
for(int i=0;i<1<<n;++i)if(cnt[i]==k)ans+=f[len][i]%mod;
printf("%lld\n",ans%mod);
}
return 0;
}
P2167 [SDOI2009]Bill的挑战的更多相关文章
- 【BZOJ1879】[SDOI2009]Bill的挑战(动态规划)
[BZOJ1879][SDOI2009]Bill的挑战(动态规划) 题面 BZOJ 洛谷 题解 本来还想着容斥来着,这个数据范围直接暴力就好.设\(f[i][S]\)表示当前填到了第\(i\)位,和\ ...
- bzoj千题计划207:bzoj1879: [Sdoi2009]Bill的挑战
http://www.lydsy.com/JudgeOnline/problem.php?id=1879 f[i][j] 表示匹配了i个字符,匹配字符串的状态为j的方案数 枚举下一个字符是什么 计算加 ...
- 【BZOJ1879】[Sdoi2009]Bill的挑战 状压DP
[BZOJ1879][Sdoi2009]Bill的挑战 Description Input 本题包含多组数据. 第一行:一个整数T,表示数据的个数. 对于每组数据: 第一行:两个整数,N和K(含 ...
- bzoj 1879: [Sdoi2009]Bill的挑战
题目链接 bzoj 1879: [Sdoi2009]Bill的挑战 题解 n<=15,装压吧 对所有字符串进行装压 可以预处理一个数组can[i][j]表示所有的字符串中,有哪些可以在第i位匹配 ...
- [bzoj1879][Sdoi2009]Bill的挑战_动态规划_状压dp
Bill的挑战 bzoj-1879 Sdoi-2009 题目大意: 注释:$1\le t \le 5$,$1\le m \le 15$,$1\le length \le 50$. 想法: 又是一个看数 ...
- [LuoguP2167][SDOI2009]Bill的挑战_容斥原理/状压dp
Bill的挑战 题目链接:https://www.luogu.org/problem/P2167 数据范围:略. 题解: 因为$k$特别小,想到状压. 状压的方式也非常简单,就是暴力枚举. 但是会不会 ...
- bzoj 1879 [Sdoi2009]Bill的挑战(状压DP)
Description Input 本题包含多组数据. 第一行:一个整数T,表示数据的个数. 对于每组数据: 第一行:两个整数,N和K(含义如题目表述). 接下来N行:每行一个字符串. Output ...
- [SDOI2009]Bill的挑战
题目描述 题解: 因为要求的T长度一定,可定义f[i][j] 为前i位状态为j的方案,can[i][j]表示第i为字母j,可行的状态 每次往后推就行了 #include <algorithm&g ...
- [SDOI2009]Bill的挑战——全网唯一 一篇容斥题解
全网唯一一篇容斥题解 Description Solution 看到这个题,大部分人想的是状压dp 但是我是个蒟蒻没想到,就用容斥切掉了. 并且复杂度比一般状压低, (其实这个容斥的算法,提出来源于y ...
随机推荐
- 给category添加基本数据类型属性
给category添加基本数据类型属性 说明 通常,我们添加属性都是通过对象扩展来实现的,其实,我们也可以用runtime来添加基本数据类型的属性 源码 // // UIView+AnimationP ...
- 为什么有时候NSData转换成NSString的时候返回nil
为什么有时候NSData转换成NSString的时候返回nil 有时候,NSData明明有值,可是,当转换成NSString的时候,却没有值,现在来进行测试:) -现在提供测试用素材- 源码如下: / ...
- 如何确定PHP CLI 的php.ini文件的位置
当我们安装扩展时,可能需要手动配置php.ini文件,把扩展加进去,所以要确认PHP CLI的php.ini文件的位置.可以运行php --ini查找PHP CLI的ini文件位置,结果类似如下(各个 ...
- springMVC參数传递
本文是本人在学习网络视屏springMVC的过程中的学习笔记. 为了更便于理解我决定从实际使用的角度解释. 我们在浏览器输入地址 http://localhost:8080/springMVC6/us ...
- mybatis #{}和${}的区别是什么
#{}和${}的区别是什么?正确的答案是:#{}是预编译处理,${}是字符串替换.(1)mybatis在处理#{}时,会将sql中的#{}替换为?号,调用PreparedStatement的set方法 ...
- RabbitMQ 6种应用场景
http://www.rabbitmq.com/getstarted.html官网 最近业务需要使用Rabbitmq工作队列实现任务的负载分发 1.1.什么是RabbitMQ? RabbitMQ是实现 ...
- 全局唯一Id:雪花算法
雪花算法-snowflake 分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的. 有 ...
- 【node.js】Express 框架
Express 是一个简洁而灵活的 node.js Web应用框架, 提供了一系列强大特性帮助你创建各种 Web 应用,和丰富的 HTTP 工具. 使用 Express 可以快速地搭建一个完整功能的网 ...
- crontab定时执行
一.crond简介 crond是linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程,与windows下的计划任务类似,当安装完成操作系统后,默认会安装此服务工具,并且会自动启动cro ...
- springboot不使用内置tomcat启动,用jetty或undertow
Spring Boot启动程序通常使用Tomcat作为默认的嵌入式服务器.如果需要更改 - 您可以排除Tomcat依赖项并改为包含Jetty或Undertow: jetty配置: <depend ...