zoukankan      html  css  js  c++  java
  • Corn Fields

    首先什么都不填是一种,初值f[0][0]设为1

    然后有三种不合法的情况:

                                             1.不肥沃

                                             2.行冲突

                                             3.列冲突

    前两种可以预处理,最后计算时枚举上一行的状态,判断

    运算符的优先级要注意

    不断熟悉状压DP

    #include<iostream>
    #include<cstdio>
    using namespace std;
    const int M=1e8;
    const int maxn=13;
    const int maxm=4096;
    int a[maxn][maxn];
    int F[maxm],f[maxn][maxm];
    bool jd[maxm];
    int main(){
        int n,m;
        cin>>n>>m;
        for(int i=1;i<=n;i++)
            for(int j=1;j<=m;j++)
                cin>>a[i][j];
        for(int i=1;i<=n;i++)
            for(int j=1;j<=m;j++)
                F[i]=(F[i]<<1)|a[i][j];//肥沃 不肥沃
        int MAX=1<<m;
        for(int i=0;i<MAX;i++)
            jd[i]=((i&(i<<1))==0)&&((i&(i>>1))==0);//行内冲突 
        f[0][0]=1;//啥也不填先加上 
        for(int i=1;i<=n;i++)
            for(int j=0;j<MAX;j++)
                if(jd[j]&&((j&F[i])==j))
                    for(int k=0;k<MAX;k++)
                        if((k&j)==0)f[i][j]=(f[i][j]+f[i-1][k])%M;//列不冲突 
        int ans=0;
        for(int i=0;i<MAX;i++){
            ans+=f[n][i];
            ans%=M;
        }
        cout<<ans<<endl;
        return 0;
    } 
  • 相关阅读:
    opencv imdecode和imencode用法
    caffe网络中屏蔽某一层的输出Silence层
    Opencv画图操作
    linux读取Windows的txt文件问题
    yolo检测系列
    c提取文件路径、文件名和后缀名
    draknet网络配置参数
    darknet源码解析
    Web_Toy
    Heart thing
  • 原文地址:https://www.cnblogs.com/lcan/p/9405615.html
Copyright © 2011-2022 走看看