站外题求调
  • 板块学术版
  • 楼主ZeroF
  • 当前回复2
  • 已保存回复2
  • 发布时间2023/7/14 15:15
  • 上次更新2023/11/3 09:54:03
查看原帖
站外题求调
385165
ZeroF楼主2023/7/14 15:15

题目链接

#include<bits/stdc++.h>
using namespace std;
int n,m;
long long dp[25][1<<12];
bool vis[1<<11];
bool valid(int x){
	int cnt=0;
	for(int i=0;i<m;i++){
		if(!((x>>i)&1))cnt++;
		else{
			if(cnt&1)return 0;
			cnt=0;
		}
	}
	if(cnt&1)return 0;
	return 1;
}
int main(){
	while(cin>>n>>m&&n){
	    memset(vis,0,sizeof(vis));
	    memset(dp,0,sizeof(dp));
		for(int i=0;i<(1<<m);i++){
			if(valid(i))vis[i]=1;
		}
		dp[0][0]=1;
		for(int b=0;b<(1<<m);b++){
			for(int i=1;i<=n;i++){
				for(int j=0;j<(1<<m);j++){
					if(!(b&j)&&vis[b|j])dp[i][j]+=dp[i-1][b];
				}
			}
		}
		cout<<dp[n][0]<<endl;
	}
	return 0;
}
2023/7/14 15:15
加载中...