状态压缩二 (hiho 1048)
来源:互联网 发布:足彩数据分析app软件 编辑:程序博客网 时间:2024/06/04 18:04
题意:给出一个N*M的矩形格子,用2*1的块去填满块的方案数。
2<=N<=1000, 3<=m<=5
思路:由于M比较小,可以用位对其进行记录,矩形内1*1的格子的状态有
横着的开始,横着的结尾,竖着的开始,竖着的结尾,所以用0,1,2,3
来分别进行表示,这样用一个2bit即可。
为了加速,先把不可能的一些状态进行剔除,把中间的可能转移状态一次计算好,
在状态转移的时候直接拿来用就比较省时间。
#include<cstdio>#include<iostream>#include<cstring>#include<queue>#include<string>#include<vector>using namespace std;int dp[1111][1111];int n,nstate,m,q;int state[1111];vector<int> v[1111];const int M=1000000007;int get(int x,int n){return (x&(3<<(n<<1)))>>(n<<1);}bool isFrist(int x){for (int i=0;i<m;i++){int temp=get(x,i);if (temp==0) i++;else if (temp==2) continue;else return false;}return true;}bool isEnd(int x){for (int i=0;i<m;i++){int temp=get(x,i);if (temp==0) i++;else if (temp==3) continue;else return false;}return true;}bool isok(int x){for (int i=0;i<m;i++){int temp=get(x,i);if (temp==0){if (temp==m-1) return false;if (get(x,i+1)!=1) return false;i++;}else if (temp==1) return false;}return true;}bool isok2(int x,int y){for (int i=0;i<m;i++){//cout<<i<<' '<<get(x,i)<<' '<<get(y,i)<<endl;int temp=get(x,i);if (temp==2){if (get(y,i)!=3) return false;}else if (get(y,i)==3) return false;}return true;}int main(){freopen("in","r",stdin);cin>>n>>m;nstate=1<<(m<<1);q=0;for (int i=0;i<nstate;i++) if (isok(i)) state[q++]=i;for (int i=0;i<q;i++) if (isFrist(state[i])) dp[0][state[i]]=1;for (int i=0;i<q;i++) for (int j=0;j<q;j++) if (isok2(state[i],state[j])) v[i].push_back(state[j]); for (int i=0;i<n-1;i++) for (int j=0;j<q;j++) if (dp[i][state[j]]) { //cout<<state[j]<<endl; for (int k=0;k<v[j].size();k++) dp[i+1][v[j][k]]=(dp[i+1][v[j][k]]+dp[i][state[j]])%M; }int ans=0;for (int i=0;i<nstate;i++) if (isEnd(i)) ans=(ans+dp[n-1][i])%M;cout<<ans<<endl;//cout<<endl;//cout<<isok2(68,68)<<endl;//for (int i=0;i<nstate;i++) if (dp[0][i]) cout<<i<<' '<<v[i].size()<<endl;}
0 0
- 状态压缩二 (hiho 1048)
- hiho 9 状态压缩二
- HIHO #1048 : 状态压缩·二(1X2铺地NXM)
- hiho一下第八周(状态压缩)
- HIHO #1044 : 状态压缩·一(状态压缩dp)
- HiHo #1048 : 状态压缩·二 【状压-.-类似省赛B题】
- Hiho 1044 dp+状态压缩
- hiho 8 状态压缩dp
- Hiho 1044 状态压缩dp
- hiho刷题日记——第九天状态压缩·二
- hiho 1233 Boxes(状态压缩+BFS)
- HiHo #1044 : 状态压缩·一
- 状态压缩DP(二)
- hihocoder-1048 状态压缩·二(状压DP)
- hihoCoder 1048 状态压缩·二
- [HihoCoder]#1048 : 状态压缩·二
- hihocoder-#1048 : 状态压缩·二
- [hihocoder]:1048 状态压缩二(状压DP)
- 转:9个offer,12家公司,35场面试 从微软到谷歌,应届计算机毕业生的2012求职之路 !!!
- 使用 CSS3 Flexible Boxes 布局
- Java中acm包的使用
- C++对象大小讨论
- Cognos函数(二十一) - periodsToDate
- 状态压缩二 (hiho 1048)
- PAT 1058. A+B in Hogwarts (20)
- Unity3D脚本的执行先后顺序问题
- 浅谈java的多态机制
- Supplemental log
- UIScrollView滚动, 中间显示整图, 前后露出部分图
- js中 给json对象添加新的属性
- Python实例应用
- Xcode6编译SDWebImage报错解决方法(SDWebImageDownloaderOperation.m错误)