【BZOJ1879】【SDOI2009】Bill的挑战 [状压DP]
Bill的挑战
Time Limit: 4 Sec  Memory Limit: 64 MB
[Submit][Status][Discuss]
Description
  
Input
Output
T行,每行一个整数表示答案
Sample Input
  1
  2 1
  a?
  ?b
Sample Output
HINT
Solution
我们运用状压DP,令 g[i][c] 表示第 i 位,用 字符c 来匹配可行的串的集合。
然后显然就可以DP啦!f[i][opt] 表示做到了第 i 位,匹配集合为opt的方案数。
Code
#include<iostream>
#include<string>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cmath>
#include<queue>
using namespace std;
typedef long long s64; const int ONE = 4e5 + ;
const int MOD = ; int n, m, T;
int g[][], f[][];
char s[][];
int Ans; int get()
{
int res=,Q=;char c;
while( (c=getchar())< || c> )
if(c=='-')Q=-;
res=c-;
while( (c=getchar())>= && c<= )
res=res*+c-;
return res*Q;
} void Deal()
{
memset(g, , sizeof(g));
memset(f, , sizeof(f));
n = get(); m = get();
for(int i = ; i <= n; i++)
scanf("%s", s[i] + ); int len = strlen(s[] + );
for(int i = ; i <= len; i++)
for(int c = ; c <= ; c++)
for(int j = ; j <= n; j++)
if(s[j][i] == '?' || s[j][i] == c + 'a' - )
g[i][c] |= << j - ; int total = ( << n) - ;
f[][total] = ;
for(int i = ; i <= len; i++)
for(int opt = ; opt <= total; opt++)
if(f[i][opt])
for(int c = ; c <= ; c++)
(f[i + ][opt & g[i][c]] += f[i][opt]) %= MOD; Ans = ;
for(int opt = ; opt <= total; opt++)
{
int num = ;
for(int j = ; j <= n; j++)
if(opt & ( << j - )) num++;
if(num == m) Ans = (Ans + f[len + ][opt]) % MOD;
} printf("%d\n", Ans);
} int main()
{
T = get();
while(T--)
Deal();
}
【BZOJ1879】【SDOI2009】Bill的挑战 [状压DP]的更多相关文章
- BZOJ1879:[SDOI2009]Bill的挑战(状压DP)
		Description Input 本题包含多组数据. 第一行:一个整数T,表示数据的个数. 对于每组数据: 第一行:两个整数,N和K(含义如题目表述). 接下来N行:每行一个字符串. T ≤ ... 
- 【BZOJ1879】[Sdoi2009]Bill的挑战 状压DP
		[BZOJ1879][Sdoi2009]Bill的挑战 Description Input 本题包含多组数据. 第一行:一个整数T,表示数据的个数. 对于每组数据: 第一行:两个整数,N和K(含 ... 
- BZOJ 1879 [Sdoi2009]Bill的挑战 ——状压DP
		本来打算好好写写SDOI的DP题目,但是忒难了, 太难了,就写的这三道题仿佛是可做的. 生在弱省真是兴奋. 这题目直接状压,f[i][j]表示匹配到i,状态集合为j的方案数,然后递推即可. #incl ... 
- BZOJ.1879.[SDOI2009]Bill的挑战(状压DP)
		题目链接 f定义和下面的思路一样,转移时枚举填什么字符,去更新f并算出有哪些字符串可以匹配某个状态(见code吧...). 预处理出有哪些字符串在第i位可以转移到某个字符c,dp时&一下状态即 ... 
- [bzoj1879][Sdoi2009]Bill的挑战_动态规划_状压dp
		Bill的挑战 bzoj-1879 Sdoi-2009 题目大意: 注释:$1\le t \le 5$,$1\le m \le 15$,$1\le length \le 50$. 想法: 又是一个看数 ... 
- bzoj千题计划207:bzoj1879: [Sdoi2009]Bill的挑战
		http://www.lydsy.com/JudgeOnline/problem.php?id=1879 f[i][j] 表示匹配了i个字符,匹配字符串的状态为j的方案数 枚举下一个字符是什么 计算加 ... 
- Bzoj1879 [Sdoi2009]Bill的挑战
		Time Limit: 4 Sec Memory Limit: 64 MBSubmit: 724 Solved: 363 Description Input 本题包含多组数据. 第一行:一个整数T ... 
- BZOJ1879 [Sdoi2009]Bill的挑战  【状压dp】
		题目 输入格式 本题包含多组数据. 第一行:一个整数T,表示数据的个数. 对于每组数据: 第一行:两个整数,N和K(含义如题目表述). 接下来N行:每行一个字符串. T ≤ 5,M ≤ 15,字符串长 ... 
- 【BZOJ1226】[SDOI2009]学校食堂Dining 状压DP
		[BZOJ1226][SDOI2009]学校食堂Dining Description 小F 的学校在城市的一个偏僻角落,所有学生都只好在学校吃饭.学校有一个食堂,虽然简陋,但食堂大厨总能做出让同学们满 ... 
随机推荐
- Calculator 2
			github地址:https://github.com/YooRarely/object-oriented.git 新增: 计算类(拥有计算功能) 采用符号优先级计算方法 对符号不匹配的如 -2 ,自 ... 
- ACM 第十三天
			训练赛题目 题目地址:https://odzkskevi.qnssl.com/415c275cb0a15fcb4ede21b8cb5297de?v=1533963116 A题代码: #includ ... 
- LintCode-112.删除排序链表中的重复元素
			删除排序链表中的重复元素 给定一个排序链表,删除所有重复的元素每个元素只留下一个. 样例 给出 1->1->2->null,返回 1->2->null 给出 1-> ... 
- <Android>列表、网格、画廊视图及适配器的绑定
			列表视图和适配器的绑定 列表视图既可以使用ListView组件,也可以继承ListActivity.显示可以是ArrayAdapter,也可以是游标SimpleCursorAdapter,还可以是继承 ... 
- C语言的世界
			大家好,我是一名大一的学生,我叫陈由钧,我来自计算机系,一开始选择这门专业的时候,是出于对计算机的热爱,我喜欢计算机,喜欢没事琢磨琢磨计算的各种程序,各种软件,所以我选择学习计算机这门专业,第一周我就 ... 
- Android 如何判断CPU是32位还是64位
			转自:http://blog.csdn.net/wangbaochu/article/details/47723265 1. 读取Android 的system property ("ro. ... 
- ubuntu 16.04 安装jdk9错误
			转自:https://askubuntu.com/questions/769467/can-not-install-openjdk-9-jdk-because-it-tries-to-overwrit ... 
- sublime Text3 如何自动排版代码
			安装 html beautiful 然后按ctrl+shift+alt+f 
- TCP/IP三次握手与四次握手
			原文地址 http://blog.csdn.net/whuslei/article/details/6667471 http://blog.csdn.net/wo2niliye/article/det ... 
- web服务器压测工具siege、ab
			web服务器压测工具也挺多,这里只介绍我用过的这两种--siege(for linux).ab(for windows). 一.siege 1.简介: Siege是一款开源的压力测试工具,设计用于评估 ... 
