您的位置:首页 > 其它

poj 3254 Corn Fields

2014-06-15 18:25 197 查看
http://poj.org/problem?id=3254

#include <cstdio>
#include <cstring>
#include <algorithm>
#define maxn 1000
using namespace std;
const int mod= 100000000;

int dp[500][maxn];
int n,m,t1;
int s[500],a[maxn];

void inti()
{
t1=0;
for(int i=0; i<(1<<n); i++)
{
if((i&(i<<1))==0)
{
s[t1++]=i;
}
}
}

int main()
{
while(scanf("%d%d",&m,&n)!=EOF)
{
inti();
for(int i=0; i<m; i++)
{
a[i]=0;
for(int j=0; j<n; j++)
{
int c;
scanf("%d",&c);
a[i]+=(c<<j);
}
}
memset(dp,0,sizeof(dp));
for(int i=0; i<t1; i++)
{
if((a[0]&s[i])==s[i])
{
dp[0][i]=1;
}
}
for(int i=1; i<m; i++)
{
for(int j=0; j<t1; j++)
{
if((a[i]&s[j])==s[j])
{
for(int k=0; k<t1; k++)
{
if((s[j]&s[k])==0&&dp[i-1][k]!=0)
{
dp[i][j]=(dp[i][j]+dp[i-1][k])%mod;
}
}
}
}
}
int ans=0;
for(int i=0; i<t1; i++)
{
if(dp[m-1][i]!=0)
{
ans=(ans+dp[m-1][i])%mod;
}
}
printf("%d\n",ans);
}
return 0;
}


View Code
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: