摘要: 经典的状态压缩和我的上一篇几乎一样,总的来说共有三种摆放方式:1、竖放 2、横放 3、不放代码如下:#include<iostream>#include<cstdio>#include<cstring>using namespace std;#define lld __int64 lld res[13][5000];int n,m;int dfs(int i,int j,int s1,int s2,int b1,int b2){ if(j>=m) { if(b1==0 && b2==0) res[i][s1]+=res[i-1][s2] 阅读全文
posted @ 2012-03-30 16:46 书山有路,学海无涯 阅读(187) 评论(0) 推荐(0) 编辑
摘要: 看了大牛的博客才知道这道题是周伟《状态压缩》中的原题,搜了一下该文档,并仔细看了一下,让我茅塞顿开,原来是这样的:令res[i][j]表示前i-1行全部铺满,第i行状态为j的方法总数(某位置有木板则为1,反之则为0);当我们确定了第i行的状态,才能够确定第i-1行的状态。所以我们枚举第i行的所有状态就ok了。总的来说一共有7放法:1、 长方形木板竖放2、 长方形木板横放3、 缺左上角的L形木板4、 缺右上角的L形木板5、 缺左下角的L形木板6、 缺右下角的L形木板7、 不放假如我们用dfs来遍历的话,我们可以用 i,j, s1,s2,b1, b2;分别表示当前第i行、当前第j列、i-1行状态为 阅读全文
posted @ 2012-03-30 16:21 书山有路,学海无涯 阅读(277) 评论(0) 推荐(0) 编辑