硬木地板
来源:互联网 发布:js给元素赋值 编辑:程序博客网 时间:2024/03/29 07:14
硬木地板
Description
举行计算机科学家盛宴的大厅的地板为
现在必须要铺上硬木地板砖。
可以使用的地板砖形状有两种:
1)
2)
注意:必须盖满,地板砖数量足够多,不能存在同时被多个板砖覆盖的部分。
Input
包含
Output
输出方案总数,如果不可能那么输出
Sample Input
2 3
Sample Output
5
Solution
用
得到的递推式:
其中
DFS,我们有5 个参数,分别为:
列表给出:
容易看出,在本题中此种 DFS 方式实现很简单。
考虑其复杂度,因为L 形骨牌不太规则,笔者没能找到一维的方案数的递推公式,因此无法给出复杂度的解析式。
但当
则对于
Code
#include <iostream>#include <cstdio>#include <cstring>#define LL long longusing namespace std;int head[5000],nxt[600000],data[600000];LL f[20][5000],ans;int m,n,cnt;void add(int x,int y){ nxt[cnt]=head[x];data[cnt]=y;head[x]=cnt++;}void dfs(int s1,int s2,bool p1,bool p2,int step){ if(step==m){ if(!p1&&!p2){ add(s1,s2); } return; } dfs((s1<<1)^(1^p1),(s2<<1)^p2,0,0,step+1); if(!p1){ dfs(s1<<1,(s2<<1)^p2,1,1,step+1); } if(!p2){ dfs((s1<<1)^(1^p1),(s2<<1)|1,1,1,step+1); dfs((s1<<1)^(1^p1),(s2<<1)|1,0,1,step+1); } if(!p1&&!p2){ dfs((s1<<1),(s2<<1)|1,0,0,step+1); dfs((s1<<1),(s2<<1)|1,0,1,step+1); dfs((s1<<1),(s2<<1)|1,1,0,step+1); }}int main(){ freopen("floor2.in","r",stdin); freopen("floor2.out","w",stdout); memset(head,-1,sizeof head); scanf("%d%d",&m,&n); if(m>n)m^=n^=m^=n; const int limit=(1<<m); dfs(0,0,0,0,0); f[0][limit-1]=1; for(int i=1;i<=n;i++) for(int j=0;j<limit;j++) for(int k=head[j];k!=-1;k=nxt[k]) f[i][j]+=f[i-1][data[k]]; printf("%lld\n",f[n][limit-1]); return 0;}
0 0
- 硬木地板
- 口碑最好的强化地板:扬子地板
- 性价比最高的强化地板:扬子地板
- 如何选购实木地板?
- 什么是实木地板
- 欧家地板
- 怎样选择地板?
- 冬季地板选购指南
- 地板衣橱 floordrobe
- 瓷砖覆盖地板问题
- 瓷砖覆盖地板
- 瓷砖覆盖地板问题
- 瓷砖覆盖地板
- 瓷砖覆盖地板
- 【BZOJ 2331】 [SCOI2011]地板
- 瓷砖覆盖地板
- IBM 地板负载计算
- 2331: [SCOI2011]地板
- emulator: ERROR: x86 emulation currently requires hardware acceleration!
- java project 项目在 linux 下面部署步骤
- [Unity实战]一个简单的任务系统(一)
- indexOf与substring
- 日语方位词
- 硬木地板
- JDBC连接mySQL数据库
- 上架AppStore 遇到的问题总结
- Android Bundle详解
- Xunsearch体验Demo
- PyCharm个性化设置及注意事项
- C warning: function declaration isn’t a prototype
- 关于spring和Xfire的整合
- Android 将ec项目导入Android Studio