BZOJ2331 [SCOI2011]地板
来源:互联网 发布:淘宝导入别人宝贝 编辑:程序博客网 时间:2024/04/26 03:15
这鬼题……考虑一下插头DP,3种插头,分别表示拐弯了,没拐弯和没插头,逐个转移轮廓线DP一下即可,复杂度3^min(n,m)*nm
不知道为什么他们跑的都那么快,我卡了半天常数还是这么慢。
#include<iostream>#include<cstdio>#include<cstdlib>#include<cstring>#include<ctime>#include<algorithm>#include<iomanip>#include<cmath>#include<vector>#include<queue>#include<stack>#include<bitset>#include<set>#include<map>using namespace std;#define MAXN 110#define MAXM 180010#define INF 1000000000#define eps 1e-8#define MOD 20110520#define ll long longint n,m;char mp[MAXN][MAXN];int f[MAXM],g[MAXM];int mi[MAXN];int N;int w(int x,int y){return x/mi[y]%3;}int s(int x,int y,int z){return x-w(x,y)*mi[y]+z*mi[y];}int main(){int i,j,k,x,y;mi[0]=1;for(i=1;i<=11;i++){mi[i]=mi[i-1]*3;}scanf("%d%d",&n,&m);for(i=1;i<=n;i++){scanf("%s",mp[i]+1);}if(n<m){for(i=1;i<=n;i++){for(j=i;j<=m;j++){swap(mp[i][j],mp[j][i]);}}swap(n,m);}f[0]=1;N=mi[m+1];for(i=1;i<=n;i++){for(j=1;j<=m;j++){memset(g,0,sizeof(g));if(mp[i][j]=='*'){for(k=0;k<N;k++){if(!w(k,j-1)&&!w(k,j)){g[k]+=f[k];}}}else{for(k=0;k<N;k++){if(!f[k]){continue ;}x=w(k,j-1);y=w(k,j);if(x==0&&y==0){(g[s(s(k,j-1,1),j,0)]+=f[k])%=MOD;(g[s(s(k,j-1,0),j,1)]+=f[k])%=MOD;(g[s(s(k,j-1,2),j,2)]+=f[k])%=MOD;}if(x==0&&y==1){(g[s(s(k,j-1,1),j,0)]+=f[k])%=MOD;(g[s(s(k,j-1,0),j,2)]+=f[k])%=MOD;}if(x==0&&y==2){(g[s(s(k,j-1,0),j,0)]+=f[k])%=MOD;(g[s(s(k,j-1,2),j,0)]+=f[k])%=MOD;}if(x==1&&y==0){(g[s(s(k,j-1,0),j,1)]+=f[k])%=MOD;(g[s(s(k,j-1,2),j,0)]+=f[k])%=MOD;}if(x==1&&y==1){(g[s(s(k,j-1,0),j,0)]+=f[k])%=MOD;}if(x==2&&y==0){(g[s(s(k,j-1,0),j,2)]+=f[k])%=MOD;(g[s(s(k,j-1,0),j,0)]+=f[k])%=MOD;}}}memcpy(f,g,sizeof(f));}memset(g,0,sizeof(g));for(k=0;k<mi[m];k++){g[k*3]=f[k];}memcpy(f,g,sizeof(f));}printf("%d\n",f[0]);return 0;}/**/
0 0
- [bzoj2331][SCOI2011]地板
- BZOJ2331 [SCOI2011]地板
- BZOJ2331: [SCOI2011]地板
- 【SCOI2011】bzoj2331 地板
- bzoj2331: [SCOI2011]地板
- 【bzoj2331】[SCOI2011]地板 插头dp
- Bzoj2331[SCOI2011]地板:插头dp
- [插头DP] BZOJ2331 && SCOI2011 地板
- 【BZOJ 2331】 [SCOI2011]地板
- 2331: [SCOI2011]地板
- 2331: [SCOI2011]地板
- BZOJ 2331 [SCOI2011]地板
- ☆【动态规划】【SCOI2011】地板
- BZOJ 2331 SCOI2011 地板 插头DP
- [BZOJ]2331: [SCOI2011]地板 插头DP
- 硬木地板
- [scoi2011]糖果
- SCOI2011 糖果
- 类:基础
- String类型强制转换的方法
- caffe 实例笔记 2 LeNet详细解读及实现
- MYSQL 索引
- 计算机视觉初级部分知识体系
- BZOJ2331 [SCOI2011]地板
- Python读取文件
- 输入两个整数m和n,计算需要改变m的二进制表示中的多少位才能得到n。
- 欢迎使用CSDN-markdown编辑器
- 性能测试学习方式
- Fragment切换再现覆盖卡顿
- 【LeetCode】Max Consecutive Ones 解题报告
- 用一条语句判断一个整数是不是2的整数次方
- CCF201312--模拟练习试题参考答案(Java)