【BZOJ1879】[Sdoi2009]Bill的挑战

Description

Input

本题包含多组数据。 
第一行:一个整数T,表示数据的个数。 
对于每组数据: 
第一行:两个整数,N和K(含义如题目表述)。 
接下来N行:每行一个字符串。
T ≤ 5,M ≤ 15,字符串长度≤ 50。

Output

如题

Sample Input

5
3 3
???r???
???????
???????
3 4
???????
?????a?
???????
3 3
???????
?a??j??
????aa?
3 2
a??????
???????
???????
3 2
???????
???a???
????a??

Sample Output

914852
0
0
871234
67018

题解:直接用f[i][S]表示前i位,每个串是否匹配的状态为S的方案数。转移时类似于数位DP。

#include <cstdio>
#include <cstring>
#include <iostream> using namespace std;
const int P=1000003;
int T;
int n,m,ans;
char str[20][55];
int f[55][32770],g[55][30],len[20];
inline void upd(int &x,int y)
{
x+=y;
if(x>P) x-=P;
}
inline void work()
{
scanf("%d%d",&n,&m),ans=0;
register int i,j,k,x,y;
for(i=0;i<n;i++) scanf("%s",str[i]+1),len[i]=strlen(str[i]+1);
memset(f,0,sizeof(f));
f[0][(1<<n)-1]=1;
for(j=1;j<=50;j++)
{
for(k=0;k<26;k++)
{
g[j][k]=0;
for(i=0;i<n;i++) g[j][k]|=(str[i][j]=='?'||str[i][j]==k+'a')<<i;
}
}
for(i=0;i<50;i++) for(x=0;x<(1<<n);x++)
{
for(j=0;j<26;j++) upd(f[i+1][x&g[i+1][j]],f[i][x]);
for(y=j=0;j<n;j++) if(((x>>j)&1)&&i==len[j]) y++;
if(y==m) upd(ans,f[i][x]);
}
for(x=0;x<(1<<n);x++)
{
for(y=j=0;j<n;j++) if(((x>>j)&1)&&i==len[j]) y++;
if(y==m) upd(ans,f[50][x]);
}
printf("%d\n",ans);
}
int main()
{
//freopen("bz1879.in","r",stdin);
scanf("%d",&T);
while(T--) work();
return 0;
}

最新文章

  1. 微信Api分享
  2. ID还是普通字段做外键合适?
  3. 20145212&amp;20145204信息安全系统实验五
  4. python操作Excel读写--使用xlrd和xlwt
  5. Objective-c——UI基础开发第十天(自动布局)
  6. NoSQL数据库的分布式模型
  7. 一些需要注意的C知识点
  8. 【剑指offer】和为S的连续整数序列
  9. Restore IP Addresses
  10. Fixflow引擎解析(一)(介绍) - Fixflow开源流程引擎介绍
  11. 更改Altium中PCB大小/精确确定板子尺寸
  12. 老司机的奇怪noip模拟T2-huangyueying
  13. c#基础知识索引器
  14. sphinx初识
  15. SDL2源代码分析6:复制到渲染器(SDL_RenderCopy())
  16. anaconda的scikit-learn报错It seems that scikit-learn has not been built
  17. javascript 通过模块模式实现代码访问控制
  18. AndroidStudio意外崩溃,电脑重启,导致重启打开Androidstudio后所有的import都出错
  19. Page Lifecycle API
  20. CMD命令,动态执行存储或DML命令

热门文章

  1. RTMP规范 消息与消息块
  2. variable `xxx&#39; has initializer but incomplete type
  3. 使用特殊构造的5GB文件测试Win2012Dedup功能
  4. tensorflow学习笔记(10) mnist格式数据转换为TFrecords
  5. 【转】WCF入门教程一[什么是WCF]
  6. 【转】MFC WM_CTLCOLOR 消息
  7. 【转】MFC 字体LOGFONT
  8. 云计算中auto-scaling 最早的来源
  9. c++ 的vector、array和数组的比较
  10. centos7命令总结