比赛 2024暑假C班集训A 评测结果 AAAAAAAAAA
题目名称 牧场的安排 最终得分 100
用户昵称 flyfree 运行时间 0.031 s
代码语言 C++ 内存使用 3.37 MiB
提交时间 2024-07-10 10:28:18
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
#define MAXN 10010 
#define ll long long
#define mod 100000000
ll f[15][MAXN],cnt[15];
ll dp[15][MAXN],s[15][15];
ll ans,n,m,sz=1,idx;
void ycl(){
    for(int i=1;i<=m;i++){
        f[i][++cnt[i]]=0;
        if(s[i][1]==1)f[i][++cnt[i]]=1;
        sz=1;
        for(int j=2;j<=n;j++){
            idx=cnt[i]; 
            if(s[i][j]==1){
                for(int num=1;num<=idx;num++){
                    if((f[i][num]&sz)==0){
                        f[i][++cnt[i]]=f[i][num]+sz*2;
                    }
                }
            }
            sz*=2;
        }
//        for(int j=1;j<=cnt[i];j++){
//            cout<<i<<" "<<f[i][j]<<endl; 
//        }
    }
}
int main(){
    freopen("cowfood.in","r",stdin);
    freopen("cowfood.out","w",stdout);
    cin>>m>>n;
    for(int i=1;i<=m;i++){
        for(int j=1;j<=n;j++){
            cin>>s[i][j];
        }
    }
    ycl();
    dp[0][1]=1;
    cnt[0]=1;
    f[0][1]=0;
    for(int i=1;i<=m;i++){
        for(int numa=1;numa<=cnt[i];numa++){
            for(int numb=1;numb<=cnt[i-1];numb++){
                if((f[i][numa]&f[i-1][numb])==0){
                    dp[i][numa]=(dp[i-1][numb]+dp[i][numa])%mod;
                }
            }
        }
    }
    for(int i=1;i<=cnt[m];i++)ans=(ans+dp[m][i])%mod;
    cout<<ans;
    return 0;
}