悬关求助
查看原帖
悬关求助
696085
ZZ_nyn楼主2023/10/2 16:24
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define N 2005
int n,k,s,tot,num,s1,s2;
int ok[N],cnt[N],dp[10][N][N];
signed main(){
	cin>>n>>k;
	for(int i=0;i<(1<<n);i++){
		s=i,tot=0;
		if(((s<<1)&s==0)&&((s>>1)&s==0))
		{
			ok[++num]=s;
			while(s){
				if(s&1)++tot;
				s>>=1;
			}
			cnt[s]=tot;
		}
	}
	cout<<num<<endl;
	for(int i=1;i<=num;i++){
		cout<<ok[i]<<" "<<cnt[ok[i]]<<endl;
	}
	dp[0][0][0]=1;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=num;j++){
			//此行
			s1=ok[j];
			for(int l=1;l<=num;l++){
				//上行
				s2=ok[l];
				if(s2<<1&s1==0&&s2>>1&s1==0&&s2&s1==0){
				for(int h=cnt[s1];h<=k;h++){
					dp[i][h][s1]+=dp[i-1][h-cnt[s1]][s2];
				}
				}	
			} 
		}
	}
	int ans=0;
	for(int i=1;i<=num;i++){
		ans+=dp[n][k][ok[i]];
	}
	cout<<ans;
	return 0;
}

num始终为零,目测初始化错误

2023/10/2 16:24
加载中...