求调后四个点wa了
查看原帖
求调后四个点wa了
1435772
Leehy楼主2025/7/22 12:46
#include<bits/stdc++.h>
using namespace std;
#define int unsigned long long
int n,f[10][2001][201],k,a[2001],b[2001],num,m,sum,ans;
signed main(){
	cin>>n>>k;
	for(int i=0;i<(1<<n);i++){
		m=i,num=0;
		while(m){
			if(m&1)num++;
			m>>=1;
		}
		a[i]=num;
		if((((i<<1)|(i>>1))&i)==0)b[++sum]=i;
	}
	f[0][0][0]=1;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=sum;j++){
			int sj=b[j];
			for(int kk=1;kk<=sum;kk++){
				int sk=b[kk];
				if(((sk|(sk<<1)|(sk>>1))&sj)==0){
					for(int an=0;an<=k;an++){
						if(an-a[sj]>=0)f[i][an][sj]+=f[i-1][an-a[sj]][sk];
					} 
				}
			}
		}
	}
	for(int i=1;i<=sum;i++)ans+=f[n][k][b[i]];
	cout<<ans<<endl;
	return 0;
}
2025/7/22 12:46
加载中...