bzoj 1087 [SCOI2005]互不侵犯King 状压dp

来源:互联网 发布:市政道路工程验收数据 编辑:程序博客网 时间:2024/05/22 02:59

sb状压,输int错了一次,没救了。。。

#include <bits/stdc++.h>using namespace std;#define ll long long#define N (1<<9)+10int n,m;bool g[N][N];ll f[11][110][N],ans;int num[N];int check(int x,int y){    for(int i=0;i<n;i++)        if(y>>i&1)        {            if(y>>i+1&1)return 0;            if(x>>i+1&1)return 0;            if(i&&x>>i-1&1)return 0;            if(i&&y>>i-1&1)return 0;            if(x>>i&1)return 0;        }    return 1;}int main(){    //freopen("tt.in","r",stdin);    scanf("%d%d",&n,&m);    for(int i=0;i<1<<n;i++)        for(int j=0;j<1<<n;j++)            g[i][j]=check(i,j);    for(int i=1;i<1<<n;i++)        num[i]=num[i-(i&-i)]+1;    f[0][0][0]=1;    for(int i=0;i<n;i++)        for(int j=0;j<=m;j++)            for(int k=0;k<1<<n;k++)                for(int t=0;t<1<<n;t++)                    if(g[k][t]&&j+num[t]<=m)                        f[i+1][j+num[t]][t]+=f[i][j][k];    for(int i=0;i<1<<n;i++)        ans+=f[n][m][i];    printf("%lld\n",ans);    return 0;}
0 0