只WA#16,蒟蒻求助
查看原帖
只WA#16,蒟蒻求助
551894
lemon2021楼主2025/7/28 17:04
#include<bits/stdc++.h>
using namespace std;
struct node{
	int num[21];
};
int n, m;
node a[21];
int ans[21];
void dfs(int x, int start, int sum, vector<node> t){
	if(t.size() <= 0){
		ans[x] = min(ans[x], sum);
		if(start == 1 && n != 1){
			ans[x] = 1;
		}
		return;
	}
	vector<node> temp;
	for(int i = start; i <= m; i++){
		temp.clear();
		for(int j = 0; j < t.size(); j++){
			if(a[x].num[i] == t[j].num[i]){
				temp.push_back(t[j]);
			}
		}
		dfs(x, i + 1, sum + 1, temp);
	}
	return;
}
int main(){
	memset(ans, 0x3f, sizeof(ans));
	scanf("%d%d", &n, &m);
	for(int i = 1; i <= n; i++){
		for(int j = 1; j <= m; j++){
			scanf("%d", &a[i].num[j]);
		}
	}
	for(int i = 1; i <= n; i++){
		for(int j = 1; j <= n; j++){
			if(i == j){
				continue;
			}
			bool t = false;
			for(int k = 1; k <= m; k++){
				if(t){
					break;
				}
				if(a[i].num[k] != a[j].num[k]){
					t = true;
					break;
				}
			}
			if(!t){
				ans[i] = -1;
			}
		}
	}
	vector<node> t;
	for(int i = 1; i <= n; i++){
		if(ans[i] == -1){
			continue;
		}
		t.clear();
		for(int j = 1; j <= n; j++){
			if(i == j || ans[j] == -1){
				continue;
			}
			t.push_back(a[j]);
		}
		dfs(i, 1, 0, t);
	}
	for(int i = 1; i <= n; i++){
		printf("%d ", ans[i]);
	}
	return 0;
}
2025/7/28 17:04
加载中...