zoukankan      html  css  js  c++  java
  • [STOI2014]舞伴(dp)

    STOI是汕头OI...无聊翻到了去年的比赛题目,就写然后自己测了一下。

    其实我很想吐槽为什么题目名是perm,perm好像和舞伴完全无关..

    dp(x,s)=∑dp(x-1,s-{i}))(0<=i<n,i∈s,i号女生和x号男生是朋友),dp(x,s)表示前x个男生已和女生配对,已配对女生用集合s表示。边界:第0号男生和第i号女生(0<=i<n),若是朋友则 dp(0,{i})=1;否则dp(0,{i})=0.计算过程中边算边mod,最后输出就OK了。

    ----------------------------------------------------------------------------

    #include<cstdio>
    #include<cstring>
    #include<iostream>
    #include<algorithm>
    #define rep(i,r) for(int i=0;i<r;i++)
    #define clr(x,c) memset(x,c,sizeof(x))
    using namespace std;
    const int maxn=20+5;
    int mod,n;
    int ok[maxn][maxn];
    int d[maxn][1<<20];
    int dp(int x,int s) {
        int &ans=d[x][s];
        if(ans>=0) return ans;
        ans=0;
        rep(i,n) if(ok[x][i] && (s & (1<<i)))
            (ans+=dp(x-1,s^(1<<i)))%=mod;
        return ans;
    }
    int main()
    {
        freopen("perm.in","r",stdin);
        freopen("perm.out","w",stdout);
        
        
        clr(ok,0); clr(d,-1);
        cin>>n>>mod;
        rep(i,n) rep(j,n) scanf("%d",&ok[i][j]);
        rep(i,n)
            if(ok[0][i]) d[0][1<<i]=1;
            else d[0][1<<i]=0;
        cout<<dp(n-1,(1<<n)-1)<<endl;
        
        return 0;
    }

    ------------------------------------------------------------------------------------
     

  • 相关阅读:
    使用android-ndk官方ndkbuild例子
    小米8如何root
    Ubuntu点击dash home就崩溃
    Python自定义排序
    adb命令
    sqoop数据导出导入命令
    Docker命令详解
    如何输出第二列相同的行
    如何使用Xmanager及VNC登录远程桌面
    搭建GoldenGate的单向复制环境
  • 原文地址:https://www.cnblogs.com/JSZX11556/p/4337981.html
Copyright © 2011-2022 走看看