1725: [Usaco2006 Nov]Corn Fields牧场的安排
2017-07-02 16:05
211 查看
题目链接
题目大意:在一个M*N的矩阵上放草,有些位置不能放置,放的草不能四连通,求方案数。
题解:1.判断单行状态x是否可行:对于单独的一行,二进制为1 0 1……没有1相邻时符合,这样左移一位并&就是0
2.判断单行状态x和矩阵状态k是否可行:x|v[k]==v[k]
3.判断两行状态冲突:x&y=1
f[i][j]表示种到第i行,第i行状态为j的方案数
f[i][j]=(f[i][j]+f[i−1][k]),j和k分别表示这一行和上一行的状态。
ans=∑i=0totf[m][i]
有一个常数优化:可以预处理出所有可行状态以减少枚举量
我的收获:状压强啊
题目大意:在一个M*N的矩阵上放草,有些位置不能放置,放的草不能四连通,求方案数。
题解:1.判断单行状态x是否可行:对于单独的一行,二进制为1 0 1……没有1相邻时符合,这样左移一位并&就是0
2.判断单行状态x和矩阵状态k是否可行:x|v[k]==v[k]
3.判断两行状态冲突:x&y=1
f[i][j]表示种到第i行,第i行状态为j的方案数
f[i][j]=(f[i][j]+f[i−1][k]),j和k分别表示这一行和上一行的状态。
ans=∑i=0totf[m][i]
有一个常数优化:可以预处理出所有可行状态以减少枚举量
我的收获:状压强啊
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; #define P 100000000 const int M=13; int m,n,x,tot,cnt; int t[M],v[M],f[M][1<<(M-1)],sta[1<<(M-1)]; inline bool ok(int x){return !(x&(x<<1));} inline bool fit(int x,int k){return (x|v[k])==v[k];} inline void updata(int &x,int y){x+=y;if(x>P) x-=P;} void dp() { for(int i=2;i<=m;i++) for(int k=1;k<=cnt;k++){ if(!fit(sta[k],i)) continue;//判断k是否可行 for(int j=1;j<=cnt;j++){ if(!fit(sta[j],i-1)||(sta[k]&sta[j])) continue;//判断j是否可行,j,k是否冲突 updata(f[i][k],f[i-1][j]); } } } void work() { dp(); int ans=0; for(int i=0;i<=tot;i++) updata(ans,f[m][i]); cout<<ans%P<<endl; } void init() { scanf("%d%d",&m,&n);tot=(1<<n)-1; for(int i=1;i<=m;i++) for(int j=1;j<=n;j++) scanf("%d",&x),v[i]<<=1,v[i]+=x; for(int i=0;i<tot;i++) if(ok(i)) sta[++cnt]=i;//预处理出所有可行状态 for(int i=1;i<=cnt;i++) if(fit(sta[i],1)) f[1][i]=1;//初始化 } int main() { init(); work(); return 0; }
相关文章推荐
- 【bzoj1725】[Usaco2006 Nov]Corn Fields牧场的安排
- 1725: [Usaco2006 Nov]Corn Fields牧场的安排
- [BZOJ1725] [Usaco2006 Nov]Corn Fields牧场的安排
- bzoj1725 [Usaco2006 Nov]Corn Fields牧场的安排(状压dp)
- 【BZOJ】1725: [Usaco2006 Nov]Corn Fields牧场的安排
- 【bzoj1725】[USACO2006 Nov]Corn Fields牧场的安排 状态压缩dp
- 【bzoj1725】【Usaco2006 Nov】Corn Fields牧场的安排【状压dp】
- bzoj:1725: [Usaco2006 Nov]Corn Fields牧场的安排
- BZOJ 1725 [Usaco2006 Nov]Corn Fields牧场的安排 状态压缩DP
- BZOJ 1725: [Usaco2006 Nov]Corn Fields牧场的安排
- 【BZOJ1725】[Usaco2006 Nov]Corn Fields牧场的安排 状压DP
- BZOJ1725: [Usaco2006 Nov]Corn Fields牧场的安排 状压DP
- bzoj 1725: [Usaco2006 Nov]Corn Fields牧场的安排【状压dp】
- [BZOJ1725][Usaco2006 Nov]Corn Fields牧场的安排(状压dp)
- BZOJ 1725: [Usaco2006 Nov]Corn Fields牧场的安排 状压dp
- bzoj1725 [USACO2006NOV]Corn Fields牧场的安排(状压dp)
- bzoj 1725: [Usaco2006 Nov]Corn Fields牧场的安排(状压DP)
- bzoj 1725: [Usaco2006 Nov]Corn Fields牧场的安排
- BZOJ1725: [Usaco2006 Nov]Corn Fields牧场的安排
- bzoj1725: [Usaco2006 Nov]Corn Fields牧场的安排 状压dp