1. 题目

传送门= ̄ω ̄=

2. 题解

https://www.k-xzy.xyz/?p=1320
改下代码就行了。

代码:

#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
LL n,m,t,st[100],stc,f[105][600][100],ans;
void initdfs(LL c,LL k)
{
    if(c>n){st[stc++]=k;return;}
    initdfs(c+1,k);
    if(!(k&(1<<(c-1))))initdfs(c+1,k|(1<<c));
}
LL dfs(LL c,LL l,LL k)
{
    for(LL i=1;i<=n;i++)l+=((k>>i)&1);
    if(f[c][l][k]!=-1)return f[c][l][k];
    if(l==t)return f[c][l][k]=1;
    if(c>m||l>t)return f[c][l][k]=0;
    f[c][l][k]=0;
    for(LL i=0;i<stc;i++)
        if(!(k&st[i])&&!((k<<1)&st[i])&&!((k>>1)&st[i]))
            f[c][l][k]+=dfs(c+1,l,st[i]);
    if(f[c][l][k]>2147483647ll)printf("2147483648\n"),exit(0);
    return f[c][l][k];
}
int main()
{
    scanf("%lld%lld%lld",&n,&m,&t),initdfs(1,0),memset(f,-1,sizeof(f));
    printf("%lld\n",dfs(1,0,0));
    return 0;
}

分享至ヾ(≧∇≦*)ゝ:
分类: 所有

XZYQvQ

炒鸡辣鸡的制杖蒟蒻一枚QvQ

发表评论

电子邮件地址不会被公开。 必填项已用*标注

你是机器人吗? =。= *