架构2队 6分难题《德玛西亚万岁》 解题答案(C++)

#include<bits/stdc++.h>
using namespace std;
#define fi first
#define se second
#define pb push_back
#define mp make_pair
#define lowbit(x) x&(-x)
 
typedef long long ll;
typedef pair<int,int> pii;
typedef pair<ll, ll> pll;
 
const int N = 5e5+5;
const ll mod = 100000000;
const int INF = 0x3f3f3f3f;
const double eps =1e-9;
const double PI=acos(-1.0);
const int dir[4][2]={-1,0,1,0,0,-1,0,1};
const int exdir[4][2]={1,1,1,-1,-1,1,-1,-1};
 
ll qpow(ll x,ll y){
    ll ans=1,t=x;
    while(y>0){
        if(y&1)ans*=t,ans%=mod;
        t*=t,t%=mod;
        y>>=1;
    }
    return ans%mod;
}
 
ll dp[13][(1<<12)+5];
int s[13][13],n,m;
void solve(){
    memset(dp,0,sizeof(dp));
    memset(s,0,sizeof(s));
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++)cin>>s[i][j];
    for(int i=n;i>0;i--){
        for(int j=0;j<(1<<m);j++){
            int f=1;
            for(int k=0;k<m;k++){
                if((j&(1<<k)&&!s[i][m-k])||(k<m-1&&j&(1<<k)&&j&(1<<k+1))){f=0;break;}
            }
            if(f){
                if(i==n)dp[i][j]=1;
                else {
                    for(int k=0;k<(1<<m);k++){
                        if(!(k&j))dp[i][j]+=dp[i+1][k]%mod,dp[i][j]%=mod;
                    }
                }
            }
        }
    }
    ll ans=0;
    for(int i=0;i<(1<<m);i++){
        ans+=dp[1][i]%mod,ans%=mod;
    }
    cout<<ans;
}


int main(){
    ios::sync_with_stdio(0);
    cin.tie(0);cout.tie(0);
    while(cin>>n>>m)solve(),cout<<'\n';
    return 0;
}

全部评论

相关推荐

面了100年面试不知...:头像换成柯南再试试
点赞 评论 收藏
分享
用微笑面对困难:不是你千万别小看这家公司,他们的预估市值成倍上涨,三次在报告看见这个公司了,总之如果是给股权的话可以试试,未来没准真能发家致富哈哈哈哈
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务