POJ 3254 Corn Fields (状压DP+滚动数组)

2015-07-20 17:24:37 · 作者: · 浏览: 4

题目地址:POJ 3254

状压水题。

先预处理出每行所有可能出现的情况。然后可以用vector存起来。

然后先处理出第一行所有的情况。然后再从第二行开始不断与上一行进行状态转移,状态转移很简单就不说了。

最后统计出最后一行的个数和就可以了。

代码如下;

#include 
  
   
#include 
   
     #include 
    
      #include 
     
       #include 
      
        #include 
       
         #include 
         #include 
         
           #include 
          
            using namespace std; #define LL __int64 const int mod=100000000; const int INF=0x3f3f3f3f; int a[20][20]; int dp[3][1<<13]; vector
           
            vec[13]; bool Judge(int x, int y, int m) { int i; for(i=0; i
            
             0&&(j&(1<
             
              =mod) dp[i&1][tmp]%=mod; } } if(i==n-1) { ans+=dp[i&1][tmp]; if(ans>=mod) ans%=mod; //printf("%d\n",ans); } } } if(n==1) { ans=vec[0].size(); } printf("%d\n",ans); return 0; }