德玛西亚万岁

德玛西亚万岁

https://ac.nowcoder.com/acm/problem/15034

前言:

好简单啊...我最近写这种题跟写x x题一样...或许就是x x题吧...

思路:

令f[i][j]表示第i行状态时j的方案数,然后把合法的转移一下,不合法的不转移就好了.至从我码力变好了之后写这种题真的...)

代码:

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=13,M=(1<<13);
const int mod=100000000;
int f[N][M];//到了第i行,站人的状态为j的方案数. 
int mp[N];
int n,m,x;
bool ck(int u)
{
    bool last=false;
    for(int i=0;i<m;i++)
    {
        if(last&&(u>>i&1))    return true;
        else if(u>>i&1)        last=true;
        else                last=false;
    }return false;
}
int main()
{
    while(scanf("%d%d",&n,&m)!=EOF)
    {
        memset(mp,0,sizeof mp);
        memset(f,0,sizeof f);
        for(int i=1;i<=n;i++)
        {
            for(int j=1;j<=m;j++)
            {
                scanf("%d",&x);
                mp[i]*=2;
                mp[i]+=x;
            }
        }f[0][0]=1;int ans=0;
        for(int i=1;i<=n;i++)
        {
            for(int j=0;j<(1<<m);j++)//枚举这行站人的情况.
            {
                if(ck(j)||((j|mp[i])!=mp[i]))    continue;
                for(int k=0;k<(1<<m);k++)//枚举上行站人的情况. 
                {
                    if(j&k)    continue;
                    f[i][j]+=f[i-1][k];
                    f[i][j]%=mod;
                }
            } 
        }
        for(int i=0;i<(1<<m);i++)
        {
            ans+=f[n][i];ans%=mod;
        }printf("%d\n",ans);
    }
    return 0;
}
lpt的小屋 文章被收录于专栏

我想要一份甜甜的爱情

全部评论

相关推荐

投递北京经纬恒润科技股份有限公司等公司10个岗位
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
08-20 19:41
那一天的Java_J...:简历完全流水账,学生思维很严重,还有很大的优化空间,可以多看看牛客的简历。
点赞 评论 收藏
分享
评论
3
收藏
分享

创作者周榜

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