记搜40分WA求助!
查看原帖
记搜40分WA求助!
494699
卷王慢即快楼主2023/4/1 13:23

呜唔,给关注吧。

#include <bits/stdc++.h>
using namespace std;
#define INF 10000000
int n, m, k, ans = 10000;
int a[107][27];
int cnt[107];
bool vis[107];
int f[107][107];
inline bool check() {
	for(int i = 1; i <= m; i++)
		if(cnt[i] == 0) return 0;
	return 1;
}
inline int dfs(int x, int num) {
	if(f[x][num] != INF) return f[x][num];
	if(check()) return f[x][num] = num;
	if(x > n) return INF;
	int res = INF;
	res = min(res, dfs(x + 1, num));
	for(int i = 1; i <= k; i++)
		cnt[a[x][i]]++;
	res = min(res, dfs(x + 1, num + 1));
	for(int i = 1; i <= k; i++)
		cnt[a[x][i]]--;
	return f[x][num] = res;
}
inline int read() {
	int x = 0, f = 1;
	char ch = getchar();
	while(ch < '0' || ch > '9') {
		if(ch == '-') f = -1;
		ch = getchar();
	}
	while(ch >= '0' && ch <= '9') {
		x = (x << 1) + (x << 3) + (ch ^ 48);
		ch = getchar();
	}
	return x * f;
}
int main() {
	n = read(), m = read(), k = read();
	for(int i = 0; i <= 101; i++)
		for(int j = 0; j <= 101; j++)
			f[i][j] = INF;
	for(int i = 1; i <= n; i++)
		for(int j = 1; j <= k; j++) {
			a[i][j] = read();
			vis[a[i][j]] = 1;
		}
	for(int i = 1; i <= m; i++)
		if(vis[i] == 0) {
			printf("-1");
			return 0;
		}
	ans = dfs(1, 0);
	printf("%d ", ans);
	return 0;
}
2023/4/1 13:23
加载中...