
呜唔,给关注吧。
#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;
}