为什么一直输出零
查看原帖
为什么一直输出零
873417
Istruggle楼主2023/12/16 16:55

如题,到底为什么?

#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,k,cnt=0;
int num[1<<11],s[1<<11],dp[11][1<<11][105];
signed main(){
    scanf("%lld%lld",&n,&k);
    for(int i = 0;i<=(1<<n);i++){
        if(!(i&i>>1)) s[++cnt]=i;
        int x=i;
        while(x){
            if(x&1) num[i]++;
            x=x>>1;
        }
    }
   /* cout<<cnt<<endl;
    for(int i = 1;i<=cnt;i++) cout<<s[i]; cout<<endl;
    for(int i = 0;i<=(1<<n);i++) cout<<num[i]<<" "; cout<<endl;*/
    for(int i = 0;i<=cnt;i++)
    dp[1][i][num[i]]=1;
    for(int i = 1;i<=n;i++){
        for(int a=1;a<=cnt;a++){
            for(int b =1;b<=cnt;b++){
                if(!(s[a]&(s[b]|(s[b]>>1)|(s[b]<<1)))){
                    for(int j = num[a];j<=k;j++)
                    dp[i][a][j]+=dp[i-1][b][j-num[a]];
                }  
            }
        }
    }
    int ans=0;
    for(int i = 1;i<=cnt;i++)
    //for(int j = 1;j<=cnt;j++)
    ans+=dp[n][i][k];
    printf("%lld",ans);
    return 0;
}
2023/12/16 16:55
加载中...