BZOJ1879:[SDOI2009]Bill的挑战(状压DP)
Description
Input
Output
如题
Sample Input
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
Solution
第一眼数据范围:撞鸭状压DP没跑了
而且连压什么都告诉你了,毕竟只有N能压
状态设计很简单:f[i][S]该选第i列了,当前选中的行是集合S
然后我后面就G了……搞了半天又是容斥又是各种判断乱搞只有20……
其实预处理一下就非常好做了。
预处理出g[第i列][j字母]=集合x
表示j字母可以和集合x的第i位匹配(我第一次看的时候有点绕)
然后就枚举当为集合x的时候第i位填j字母然后进行转移就好了
果然我就是R1出题人说的"学数据结构学傻了"
虽然我数据结构仍然辣鸡
Code
#include<iostream>
#include<cstring>
#include<cstdio>
#define MAXN (40001)
using namespace std;
int f[][MAXN],g[][];
int N,K,T,len,sum;
char s[][]; int main()
{
scanf("%d",&T);
while (T--)
{
memset(f,,sizeof(f));
memset(g,,sizeof(g));
scanf("%d%d",&N,&K);
for (int i=; i<=N; ++i)
scanf("%s",s[i]+);
len=strlen(s[]+); for (int i=; i<=len; ++i)
for (int j=; j<; ++j)
for (int k=; k<=N; ++k)
if (s[k][i]=='?' || s[k][i]==j+'a')
g[i][j]|=(<<k-); sum=(<<N)-;
f[][sum]=;
for (int i=; i<=len; ++i)
for (int j=; j<=sum; ++j)
if (f[i-][j])//不加这个判断会TLE,可能是%太多了?
for (int k=; k<; ++k)
(f[i][j&g[i][k]]+=f[i-][j])%=; int ans=;
for (int i=; i<=sum; ++i)
{
int x=i,cnt=;
while (x)
{
if (x&) cnt++;
x>>=;
}
if (cnt==K) (ans+=f[len][i])%=;
}
printf("%d\n",ans);
}
}
BZOJ1879:[SDOI2009]Bill的挑战(状压DP)的更多相关文章
- 【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的挑战 Time Limit: 4 Sec Memory Limit: 64 MB[Submit][Status][Discuss] Description Input 第一行:一个整数T, ...
- [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 的学校在城市的一个偏僻角落,所有学生都只好在学校吃饭.学校有一个食堂,虽然简陋,但食堂大厨总能做出让同学们满 ...
随机推荐
- WeUI logo专为微信设计的 UI 库 WeUI
http://www.oschina.net/p/weui?fromerr=FnwHyWAb http://weui.github.io/weui/
- 压缩图片或pdf
压缩图片或pdf { /// <summary> /// 压缩图片或pdf大小的Level /// </summary> public enum ReduceSizeLevel ...
- Java - USC2字符串截取
Java内部采用UTF-16(USC2)编码,比如:"我" 为 98 17,"a" 为 0 97," " 为 0 32,"1&qu ...
- ExceptionHelper异常工具类
using System;using System.Collections.Generic;using System.Text; namespace JiaWel.Utilities{ public ...
- mysql数据库详解
001 数据库应用系统设计 1.规划 2.需求分析 3.概念模型设计 4.逻辑设计 5.物理设计 6.程序编制及调试 7.运行及维护. 002 创建数据库 CREATE DAT ...
- Java 之 static的使用方法(6)
Java 中的 static 使用之静态变量 大家都知道,我们可以基于一个类创建多个该类的对象,每个对象都拥有自己的成员,互相独立. 然而在某些时候,我们更希望该类所有的对象共享同一个成员.此时就是 ...
- 01_Zookeeper简述
[Zookeeper应用场景] zookeeper作为一个开源的分布式应用协调系统,已经用到了许多分布式项目中,用来完成统一命名服务.状态同步服务.集群管理.分布式应用配置项的管理等工作. [Zook ...
- Java链接 Oracle11g R2
菜鸟学习Oracle数据库,使用Java代码链接数据库. 首先要配置Eclipse,在新建的工程中,Package Explorer->工程名->Build path->Add ex ...
- Shared Project
从VS2015开始支持Shared Project,挺好的,省去了单独引用的麻烦.
- 为TextView增加onclick
必须添加上 android:clickable="true"