关于数组要开多大的问题
查看原帖
关于数组要开多大的问题
756529
progress_from0楼主2023/3/9 19:15
#include<bits/stdc++.h>
#define ll long long 

using namespace std;
int cnt,n,k;
ll s[200],num[200],f[10][2000][100]
,ans;

inline void init(){
	cnt=0;
	for(int i=0;i<(1<<n);i++){
		if(i&(i<<1))continue;
		int sum=0;
		for(int j=0;j<n;j++){
			if(i&(1<<j))++sum;
		}
		s[++cnt]=i;
		num[cnt]=sum;
	}
}

int main(){
	scanf("%d%d",&n,&k);
	init();
	f[0][1][0]=f[0][0][0]=1;
	for(int i=1;i<=n;++i){
		for(int j=1;j<=cnt;++j){
			for(int l=0;l<=k;++l){
				if(l>=num[j]){
					for(int t=1;t<=cnt;++t){
						if(!(s[t]&s[j])&&
						!(s[t]&(s[j]<<1))&&
						!(s[t]&(s[j]>>1))){
							f[i][j][l]+=f[i-1][t][l-num[j]];
						}
					}
				}
			}
		}
	}
	for(int i=1;i<=cnt;i++){
		ans+=f[n][i][k];
	}
	cout<<ans<<endl;
	return 0;
}

sum,s最小能开多少??

2023/3/9 19:15
加载中...