WA求调
查看原帖
WA求调
685964
shuqiang楼主2024/12/24 22:48
#include<iostream>
#include<vector>

using namespace std;

const int N = 20;
int n, m, k, b[N][N], c[N], ans = 0, ccnt = 0;
bool a[N];
vector<int> d[N];

void dfs(int x){
	if(x == k+1){
		bool fg = 0;
		for(int i = 1; i <= m; i++){
			if(a[b[1][i]]) fg = 1;
		}
		if(!fg) return;
		for(int i = 1; i <= k; i++){
			if(a[i]){
				int cnt = 0;
				for(int j: d[i]){
					if(a[b[c[i]+1][j]] || c[i] == n) cnt++;
				}
				if(cnt < (d[i].size() + 1) / 2) return;
			}
		}
		ans = max(ans, ccnt);
		return; 
	}
	a[x] = 0; ccnt++;
	dfs(x+1); ccnt--;
	a[x] = 1;
	dfs(x+1);
}

int main(){
	cin >> n >> m;
	for(int i = 1; i <= n; i++){
		for(int j = 1; j <= m; j++){
			cin >> b[i][j];
			k = max(b[i][j], k);
		}
	}
	for(int i = n; i >= 1; i--){
		for(int j = 1; j <= m; j++){
			if(b[i][j] != 0){
				if(c[b[i][j]] == 0) c[b[i][j]] = i;
				if(i == c[b[i][j]]) d[b[i][j]].push_back(j);
			}
		}
	}
	dfs(1);
	cout << ans;
	return 0;
}

2024/12/24 22:48
加载中...