Corn Fields(模板)

Posted ouyang_wsgwz

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Corn Fields(模板)相关的知识,希望对你有一定的参考价值。

题目链接

 1 #include <stdio.h>
 2 #include <algorithm>
 3 #include <string.h>
 4 #include <iostream>
 5 using namespace std;
 6 typedef long long ll;
 7 
 8 inline int read()
 9 {
10     int x=0,f=1;char ch=getchar();
11     while(ch<0||ch>9){if(ch==-)f=-1;ch=getchar();}
12     while(ch>=0&&ch<=9){x=x*10+ch-0;ch=getchar();}
13     return x*f;
14 }
15 
16 /********************************************************************/
17 
18 const int mod = 100000000;
19 const int maxn = 15;
20 int n, m;
21 int dp[13][(1<<13)+5];
22 int a[maxn];
23 
24 int line(int x, int y){
25     if((a[x]&y) != y) return 0;
26     if((y&(y<<1)) != 0) return 0;
27     return 1;
28 }
29  
30 int main(){
31     int n,m;
32     while(~scanf("%d%d",&n,&m)){
33         for(int i=1;i<=n;i++){
34             a[i]=0;
35             for(int j=1;j<=m;j++){
36                 int t;
37                 scanf("%d",&t);
38                 a[i]=(a[i]<<1)+t;
39             }
40         }
41         memset(dp,0,sizeof(dp));
42         dp[0][0] = 1;
43         for(int i = 1;i <= n;i++){
44             for(int j=0;j<(1<<m);j++){
45                 if(line(i,j)==0)continue;
46                 for(int k=0;k<(1<<m);k++){
47                     if((j&k)==0){
48                         dp[i][j]=dp[i][j]+dp[i-1][k];
49                         dp[i][j]%=mod;
50                     }
51                 }
52             }
53         }
54         int ans = 0;
55         for(int i = 0;i < (1<<m);i++){
56             ans= (ans + dp[n][i] )%mod;
57         }
58         printf("%d
",ans);
59     }
60 }

 

以上是关于Corn Fields(模板)的主要内容,如果未能解决你的问题,请参考以下文章

POJ 3254 Corn Fields

解题报告P1879 [USACO06NOV]玉米田Corn Fields

POJ 3254 Corn Fields (状压DP)

[USACO06NOV]玉米田Corn Fields (状压$dp$)

玉米田Corn Fields

POJ3254Corn Fields