码迷,mamicode.com
首页 > 其他好文 > 详细

[題解](狀壓/水)luogu_P1879玉米田

时间:2019-04-18 21:58:43      阅读:137      评论:0      收藏:0      [点我收藏+]

标签:ast   bsp   int   amp   就是   i++   不可   ace   scanf   

大水題然而因為智障的錯誤调了半天......
n,m别反着输入啊......內外循環和狀態數都不等價

别的就是記錄一下每一行不可行的點,也狀壓一下,dp的時候判一下即可

#include<bits/stdc++.h>
using namespace std;
const int mod=100000000;
int n,m,tot;
int f[15][1<<12+1],c[1<<12+1];
int can[15];
int main()
{
    scanf("%d%d",&m,&n);
    for(int i=1,a;i<=m;i++)
    for(int j=1;j<=n;j++){
        scanf("%d",&a);
        if(a==0)can[i]=can[i]|(1<<(n-j));
    }
    for(int i=0;i<=(1<<n)-1;i++)
    if(!(i&(i<<1)) && !(i&(i>>1)))c[++tot]=i;
    int last,now;
    for(int i=1;i<=tot;i++){//處理第一行 
        if(c[i] & can[1])continue;
        f[1][c[i]]=1;
    }
    for(int i=2;i<=m;i++)
    for(int j=1;j<=tot;j++){
        last=c[j];if(last & can[i-1])continue;
        for(int k=1;k<=tot;k++){
            now=c[k];
            if(now & can[i])continue;
            if(now & last)continue;
            f[i][now]+=f[i-1][last];
            f[i][now]%=mod;
        }    
    }
    int ans=0;
    for(int i=0;i<=(1<<n)-1;i++){
        ans+=f[m][i];ans%=mod;
    }
    printf("%d",(ans+mod)%mod);
//    for(int i=1;i<=tot;i++)cout<<c[i]<<‘ ‘;
}

 

[題解](狀壓/水)luogu_P1879玉米田

标签:ast   bsp   int   amp   就是   i++   不可   ace   scanf   

原文地址:https://www.cnblogs.com/superminivan/p/10732476.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!