zoukankan      html  css  js  c++  java
  • 洛谷 P1879 玉米田Corn Fields 题解

    题面

    一道思维难度不大的状态压缩,也并不卡常,但细节处理要格外注意;

    f[i][j]表示前i行最后一行状态是j的方案数

    #include <bits/stdc++.h>
    #define p 100000000
    using namespace std;
    int n,m;
    int a[20][20];
    int shu[20];
    long long f[15][5010];
    int main()
    {
        cin>>n>>m;
        for(register int i=1;i<=n;i++){
            for(int j=1;j<=m;j++){
                scanf("%d",&a[i][j]);
            }
        }
        for(register int i=1;i<=n;i++){
            long long tmp=0;
            for(int j=1;j<=m;j++){
                tmp=tmp*2;
                tmp+=a[i][j];
            }
            shu[i]=tmp;
        }
        int tot=(1<<m)-1;
        f[0][0]=1;
        for(register int i=1;i<=n;i++){
            long long sum=0;
            for(register int j=0;j<=tot;j++){
                if((j&shu[i])!=j) continue;
                if((j&(j<<1))||(j&(j>>1))) continue;
                for(register int k=0;k<=tot;k++){
                    if((k&j)==0)
                    f[i][j]=(f[i][j]+f[i-1][k])%p;            
                }
            }
        }
        long long ans=0;
        for(int i=0;i<=tot;i++){
            ans=(ans+f[n][i])%p;
        }
        cout<<ans;
    }
  • 相关阅读:
    GDI+绘制字体显示不全
    vector赋值
    创建不响应(不激活)窗口
    MouseHover
    duilib窗口从任务栏恢复问题
    java 加解密
    maven依赖仲裁
    $.ajax()
    mybatis 动态SQL
    Json学习
  • 原文地址:https://www.cnblogs.com/kamimxr/p/11412995.html
Copyright © 2011-2022 走看看