求助
查看原帖
求助
965461
Beta_Theta楼主2024/8/15 19:44

测评记录 数据: 3 3 1 -1 1 0 1 -1 0 0 1 输出:3 本代码输出-1

#include<bits/stdc++.h>
using namespace std;
int n, m, s, a[125][25], dp[1025];
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, 0x3f, sizeof dp);
	dp[0] = 0;
	for (int i = 0; i < (1 << n); i++) {
	//	cout << dp[i] << "\n"; 
		for (int j = 1; j <= m; j++) {
			int s = i;
			for (int k = 1; k <= n; k++) {
				int t = 1 << (k - 1);
				if (a[j][k] == 1 && !(s & t)) {
					s ^= t;
				} else if (a[j][k] == -1 && (s & t)) {
					s ^= t;
				}
			}
			dp[s] = min(dp[s], dp[i] + 1);
			//cout<<bitset<10>(s)<<" "<<dp[s]<<"\n";
		}
	}
	if (dp[(1 << n) - 1] >= 100000) cout << -1;
	else cout << dp[(1 << n) - 1];
	return 0;
}
2024/8/15 19:44
加载中...