100pts&Unaccepted 求调带 hack 数据
查看原帖
100pts&Unaccepted 求调带 hack 数据
1123573
xyx404楼主2025/1/23 20:42

状压 DP。

#include<bits/stdc++.h>
using namespace std;
#define LL long long
#define itn int
#define ull unsigned long long
int n,m; 
LL dp[1<<11];
int a[105][12];
int main(){
	cin>>n>>m;
	
	for(int i=1;i<=m;i++){
		for(int j=1;j<=n;j++){
			cin>>a[i][j];
		}
	}
	memset(dp,120,sizeof(dp));
	LL INF=dp[2];
	dp[0]=0;// 刚开始灯都是开的
	for(int now=0;now<(1<<n);now++){// 现在的状态 
		for(int i=1;i<=m;i++){
			int change=now;
			for(int j=1;j<=n;j++){
				if(a[i][j]==-1){
					if(((change>>(j-1)&1))){
						change&=~(1<<(j-1));
					}
				}
				else if(a[i][j]==1){
					if(((change>>(j-1))&1)==0){
						change|=(1<<(j-1));
					}
				}
			}
			dp[change]=min(dp[change],dp[now]+1);
		} 
	}
	if(dp[(1<<n)-1]!=INF)cout<<dp[(1<<n)-1];
	else cout<<-1;
	return 0;
}

hack:
in:

3
3
1 -1 1 
0 1 -1 
0 0 1

ans:

3
2025/1/23 20:42
加载中...