1. 题目
2. 题解
同 https://www.mina.moe/?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;
}
0 条评论