zoukankan      html  css  js  c++  java
  • [題解](狀壓/水)luogu_P1879玉米田

    大水題然而因為智障的錯誤调了半天......
    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]<<' ';
    }
  • 相关阅读:
    团队介绍及项目介绍
    2017年秋季个人阅读计划
    软件需求分析阅读笔记
    Cookie学习总结
    暑期兴趣班第二天学习总结
    暑期兴趣班第一天学习总结
    个人总结
    第十六周工作总结
    第十五周工作总结
    第十四周工作总结
  • 原文地址:https://www.cnblogs.com/superminivan/p/10732476.html
Copyright © 2011-2022 走看看