玄关!状压DP求条!!!
  • 板块灌水区
  • 楼主kkkkks03
  • 当前回复2
  • 已保存回复2
  • 发布时间2024/12/12 20:33
  • 上次更新2024/12/13 12:15:25
查看原帖
玄关!状压DP求条!!!
1219636
kkkkks03楼主2024/12/12 20:33

This

#include<bits/stdc++.h>
using namespace std;
long long dp[14][1<<14];
int n,m;
int g[15],c,s[1<<14];
int main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			int x;cin>>x;
			g[i]=(g[i]<<1)+x;
		}
	}
	//一行中所有状态 
	for(int i=0;i<(1<<m);i++){
		//不能相邻 
		if(!(i&i>>1)){
			s[c++]=i; 
		} 
	}
	dp[0][0]=1;
	for(int i=1;i<=n+1;i++){
		for(int j=0;j<c;j++){
			for(int k=0;k<c;k++){
				if((s[j]&g[i])==s[j] && !(s[j]&s[k])){
					dp[i][j]=(dp[i][j]+dp[i-1][k])%100000000;
				}//合法的 
				printf("dp[%d][%d]=%d,",i,j,dp[i][j]);
			}
		}
		cout<<"\n";
	}
	cout<<dp[n+1][0];
	return 0;
}
2024/12/12 20:33
加载中...