AC

许诺  •  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;

}


评论:

请先登录,才能进行评论