许诺 • 2天前
#include <iostream>
#include <vector>
#include <algorithm>
#include <climits>
using namespace std; int main() {
int N, M, K;
cin >> N >> M >> K;
vector<int> candies(N, 0);
for (int i = 0; i < N; i++) {
int mask = 0;
for (int j = 0; j < K; j++) {
int flavor;
cin >> flavor;
mask |= (1 << (flavor - 1));
}
candies[i] = mask;
}
int totalStates = 1 << M;
vector<int> dp(totalStates, INT_MAX / 2);
dp[0] = 0;
for (int c : candies) {
for (int state = totalStates - 1; state >= 0; state--) {
if (dp[state] == INT_MAX / 2) continue;
int newState = state | c;
if (dp[newState] > dp[state] + 1) {
dp[newState] = dp[state] + 1;
}
}
}
int target = (1 << M) - 1;
if (dp[target] == INT_MAX / 2) {
cout << -1 << endl;
} else {
cout << dp[target] << endl;
}
return 0;
}
评论:
请先登录,才能进行评论