【bzoj2331】[SCOI2011]地板
题目链接:
题解:
分类讨论好烦啊!
0表示没有插头,1、2表示有插头,1表示接下来可以转弯,2表示接下来不能转弯,只能停在一个地方。
然后分类讨论:
插头状态 | 到达状态 |
0 0 | 2 2 | 1 0 | 0 1 |
0 1 0 2 |
0 2 | 1 0 0 0 | 0 2 |
1 0 2 0 |
与上列相反 |
1 1 |
0 0 |
对于[0 2]的讨论容易想错,开始我想可以在下面会变成[1 0],然而发现WA了,仔细思考发现我想的在下面转弯完全可以在这里断掉,然后再开一个新的,我只要在意当前这个L型砖的走向即可。
代码:
- #define Troy
- #include <bits/stdc++.h>
- using namespace std;
- const int mod=,
- N=2e5+;
- int n,m,c,xx,yy,dp[][N],tot[],stk[][N],h[N],bit[],ans;
- char mp[][];
- inline void reversal(){
- char s[][];
- for(int i=;i<=n;++i)
- for(int j=;j<=m;++j)
- s[j][i]=mp[i][j];
- memcpy(mp,s,sizeof(mp));
- swap(n,m);
- }
- inline void _plus(int &x,int y){
- x+=y;
- if(x>=mod) x-=mod;
- }
- struct edges{
- int v;edges *last;
- }edge[N],*head[(int)4e4];int cnt;
- inline void push(int s,int val){
- int pos=s%;
- for(edges *i=head[pos];i;i=i->last){
- if(stk[c][i->v]==s){
- (dp[c][i->v]+=val)%=mod;
- return ;
- }
- }
- // while(h[pos]!=-1){
- // if(stk[t][h[pos]]==s){
- // dp[t][h[pos]]+=val;
- // return ;
- // }
- // ++pos;
- // if(pos==N) pos=0;
- // }
- dp[c][++tot[c]]=val; stk[c][tot[c]]=s;
- edge[++cnt]=(edges){tot[c],head[pos]};head[pos]=edge+cnt;
- }
- inline void DP(){
- dp[][]=,tot[]=;
- register int i,j,k;
- for(i=;i<=n;++i){
- for(j=;j<=tot[c];++j) stk[c][j]<<=;
- for(j=;j<=m;++j){
- c^=;tot[c]=;cnt=;
- memset(head,,sizeof(head));
- for(k=;k<=tot[c^];++k){
- int s=stk[c^][k],p=(s>>bit[j-])&,q=(s>>bit[j])&;
- int val=dp[c^][k];
- if(!mp[i][j]){
- if(!p&&!q) push(s,val);
- }else if(!p&&!q){
- int x;
- if(mp[i+][j]){
- x=s+(<<bit[j-]);
- push(x,val);
- }if(mp[i][j+]){
- x=s+(<<bit[j]);
- push(x,val);
- }if(mp[i+][j]&&mp[i][j+]){
- s+=(<<bit[j-])+(<<bit[j])<<;
- push(s,val);
- }
- }else if(!p){
- if(q==){
- if(mp[i+][j]){
- push(s^(<<bit[j-]^(<<bit[j])),val);
- }
- if(mp[i][j+]){
- push(s+(<<bit[j]),val);
- }
- }else{
- s^=q<<bit[j];
- push(s,val);
- if(mp[i+][j])
- push(s^(<<bit[j-]+),val);
- }
- }else if(!q){
- if(p==){
- if(mp[i][j+]){
- push(s^(<<bit[j-]^(<<bit[j])),val);
- }
- if(mp[i+][j]){
- push(s+(<<bit[j-]),val);
- }
- }else{
- s^=(<<bit[j-]+);
- push(s,val);
- if(mp[i][j+])
- push(s^(<<bit[j]+),val);
- }
- }else if(p+q==){
- s^=(<<bit[j-])+(<<bit[j]);
- push(s,val);
- }
- }
- }
- }
- }
- int main(){
- scanf("%d%d",&n,&m);
- for(int i=;i<=n;++i) scanf("%s",mp[i]+);
- for(int i=;i<=;++i) bit[i]=i<<;
- if(n<m) reversal();
- for(int i=;i<=n;++i)
- for(int j=;j<=m;++j)
- if(mp[i][j]=='_') mp[i][j]=,xx=i,yy=j;
- else mp[i][j]=;
- DP();
- printf("%d\n",tot[c]?dp[c][]:);
- }
【bzoj2331】[SCOI2011]地板的更多相关文章
- bzoj2331 [SCOI2011]地板
Description lxhgww的小名叫“小L”,这是因为他总是很喜欢L型的东西.小L家的客厅是一个的矩形,现在他想用L型的地板来铺满整个客厅,客厅里有些位置有柱子,不能铺地板.现在小L想知道,用 ...
- 【BZOJ2331】[SCOI2011]地板 插头DP
[BZOJ2331][SCOI2011]地板 Description lxhgww的小名叫“小L”,这是因为他总是很喜欢L型的东西.小L家的客厅是一个的矩形,现在他想用L型的地板来铺满整个客厅,客厅里 ...
- bzoj 2331: [SCOI2011]地板 插头DP
2331: [SCOI2011]地板 Time Limit: 5 Sec Memory Limit: 128 MBSubmit: 541 Solved: 239[Submit][Status] D ...
- BZOJ2331:[SCOI2011]地板——题解
http://www.lydsy.com/JudgeOnline/problem.php?id=2331 题面复制于洛谷 题目描述 lxhgww的小名叫”小L“,这是因为他总是很喜欢L型的东西.小L家 ...
- bzoj:2331: [SCOI2011]地板
Description lxhgww的小名叫“小L”,这是因为他总是很喜欢L型的东西.小L家的客厅是一个的矩形,现在他想用L型的地板来铺满整个客厅,客厅里有些位置有柱子,不能铺地板.现在小L想知道,用 ...
- 2331: [SCOI2011]地板 插头DP
国际惯例的题面:十分显然的插头DP.由于R*C<=100,所以min(R,C)<=10,然后就可以愉悦地状压啦.我们用三进制状压,0表示没有插头,1表示有一个必须延伸至少一格且拐弯的插头, ...
- 【BZOJ】2331: [SCOI2011]地板
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2331 一眼插头DP... 考虑一个L形的东西,要构成它可以划分为两个阶段,即当前线段是拐了 ...
- 【BZOJ】2331: [SCOI2011]地板 插头DP
[题意]给定n*m的地板,有一些障碍格,要求用L型的方块不重不漏填满的方案数.L型方块是从一个方格向任意两个相邻方向延伸的方块,不能不延伸.n*m<=100. [算法]插头DP [题解]状态0表 ...
- P3272 [SCOI2011]地板
\(\color{#0066ff}{ 题目描述 }\) lxhgww的小名叫"小L",这是因为他总是很喜欢L型的东西.小L家的客厅是一个R*C的矩形,现在他想用L型的地板来铺满整个 ...
随机推荐
- 从Freelancer的热门Skill看看你应该学什么?
以下数据是2012-1-31号数据. Websites, IT & Software: PHP (2402)HTML (1639)SEO(877)MySQL (836)Link Buildin ...
- element.dispatchEvent is not a function的解决
Firebug中的出错提示: element.dispatchEvent is not a function element.dispatchEvent(event); prototype.js (第 ...
- Wooden Sticks -HZNU寒假集训
Wooden Sticks There is a pile of n wooden sticks. The length and weight of each stick are known in a ...
- spring boot:thymeleaf使用详解
简单说, Thymeleaf 是一个跟 Velocity.FreeMarker 类似的模板引擎,它可以完全替代 JSP .相较与其他的模板引擎,它有如下三个极吸引人的特点: 1.Thymeleaf 在 ...
- Coursera-AndrewNg(吴恩达)机器学习笔记——第三周
一.逻辑回归问题(分类问题) 生活中存在着许多分类问题,如判断邮件是否为垃圾邮件:判断肿瘤是恶性还是良性等.机器学习中逻辑回归便是解决分类问题的一种方法.二分类:通常表示为yϵ{0,1},0:&quo ...
- 用ASP.NET Core 2.0 建立规范的 REST API
什么是REST REST 是 Representational State Transfer 的缩写. 它是一种架构的风格, 这种风格基于一套预定义的规则, 这些规则描述了网络资源是如何定义和寻址的. ...
- Beta项目总结
Beta冲刺成员名单和工作量比例 姓名 学号 负责内容 工作量比例 张梨贤 170327109 负责企业人员的委托/收回授权.第三方机构的委托授权管理.分级统计展示.分级列表展示 26% 黄腾飞 17 ...
- Django入门一之安装及项目创建
1. 习惯性的创建虚拟环境 # 由于我安装也安装了pyhton3所以在前面要加python2 -m F:\Python Script\MyVirtualenv>python2 -m virtua ...
- 读《图解HTTP》有感-(与HTTP协作的WEB服务器)
写在前面 Web服务器一般指网站服务器,是指驻留于因特网上某种类型计算机的程序,可以向浏览器等Web客户端提供文档: 一台web服务器可以搭建多个独立域名的web网站,也可以作为通信路径(路由)上的中 ...
- python3+requests:使用类封装接口测试脚本
前言:接口测试用例较多,我们不可能每个用例都写一次requests,get或者requests,post等,所以对共用方法要进行封装处理 第一次修改:将get请求和post请求单独定义出来,使用过程中 ...