40pts求调
查看原帖
40pts求调
1010650
Expert_Dreamer楼主2024/8/6 13:40
#include<bits/stdc++.h>
using namespace std;
const int mod=1e8;
#define int long long 
int n,m,a[1145][1145],f[15][(13<<1)],isf;
signed main(){
    cin>>n>>m;
    for(int i=1;i<=n;i++) for(int j=0;j<m;j++) cin>>a[i][j];
    f[0][0]=1;
    for(int i=1;i<=n;i++){
        for(int j=0;j<m;j++){
            isf^=1;
            memset(f[isf],0,sizeof f[isf]);
            for(int k=0;k<(1<<m);k++){
                int u=(1<<j)&k,l=(j?(1<<(j-1))&k:0);
                if((i==1&&u)||(!j&&l)) continue;
                if(u){
                    f[isf][k^(1<<j)]=(f[isf][k^(1<<j)]+f[isf^1][k])%mod;
                    continue;
                }
                if(l||(!a[i][j])){
                    f[isf][k]=(f[isf][k]+f[isf^1][k])%mod;
                    continue;
                }
                f[isf][k]=(f[isf][k]+f[!isf][k])%mod;
                f[isf][k^(1<<j)]=(f[isf][k^(1<<j)]+f[isf^1][k])%mod;
            }
        }
    }
    int ans=0;
    for(int i=0;i<(1<<m);i++) ans=(ans+f[isf][i])%mod;
    cout<<ans;
}
2024/8/6 13:40
加载中...