F.A.Qs Home ProblemSet Status Ranklist Contest LoginRegister
Notice:1:注册本OJ方式请见https://www.lydsy.com/JudgeOnline/wttl/thread.php?tid=5671 2:请不要在讨论区中发空白主题帖。
大视野在线测评-欢迎您
[ New Thread ]
Problem 1087 >> 为什么CE
yangkai @ 2018-07-01 14:30:40
[ Quote ] [ Edit ] [ Delete ] 1#
大佬们能不能看看为什么CE啊
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
#define LL long long
#define N 1000
LL dp[10][100][N],cnt[N];
bool mark[N],link[N][N];
int main(){
LL n,m;scanf("%lld%lld",&n,&m);
LL up=(1<<n)-1;
for(LL i=0;i<=up;i++)if(((i>>1)&i)==0){
for(LL j=i;j;j>>=1)cnt[i]+=(j&1);
mark[i]=1;
}
for(LL i=0;i<=up;i++)if(mark[i])
for(LL j=0;j<=up;j++)if(mark[j])
if((i&j)==0&&((i>>1)&j)==0&&((i<<1)&j)==0)
link[i][j]=1;
for(LL i=0;i<=up;i++)if(mark[i])dp[1][cnt[i]][i]=1;
for(LL i=2;i<=n;i++)
for(LL j=0;j<=up;j++)if(mark[j])
for(LL k=0;k<=up;k++)if(mark[k]&&link[j][k])
for(LL l=cnt[j];l+cnt[k]<=m;l++)
dp[i][l+cnt[k]][k]+=dp[i-1][l][j];
LL ans=0;
for(LL i=0;i<=up;i++)ans+=dp[n][m][i];
printf("%lld",ans);
return 0;
}
[Top] [Previous Page] [Next Page]

HOME Back