acwing 327. 玉米田
Posted Jozky86
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了acwing 327. 玉米田相关的知识,希望对你有一定的参考价值。
题意:
m * n的土地,有的土地不育,有的可以种植,要求相邻的土地不能同时种植玉米,问有多少种种植方式
题解:
状压dp,先存每一行可能的状态,然后状态转移,注意相邻不能同时种植除了左右还有上下
代码:
#include <bits/stdc++.h>
using namespace std;
const int P=1e9;
int a[15][15],f[15],h[5010],dp[15][5010],ans;
int main(){
int n,m;
cin>>n>>m;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++){
cin>>a[i][j];
f[i]=(f[i]<<1)+a[i][j];
}
dp[0][0]=1;
for(int i=0;i<(1<<m);i++)h[i]=((i&(i<<1))==0)&&((i&(i>>1))==0);
for(int i=1;i<=n;i++)
for(int j=0;j<(1<<m);j++)
if(h[j]&&((f[i]&j)==j))
for(int k=0;k<(1<<m);k++)
if((j&k)==0)dp[i][j]=(dp[i][j]+dp[i-1][k])%P;
for(int i=0;i<(1<<m);i++)ans=(ans+dp[n][i])%P;
cout<<ans;
return 0;
}
以上是关于acwing 327. 玉米田的主要内容,如果未能解决你的问题,请参考以下文章