AC

许诺  •  2天前


#include <iostream>
#include <vector>
#include <climits>

using namespace std; int main() {

int n, k;
cin >> n >> k;
vector<vector<int>> cost(k, vector<int>(n));
for (int i = 0; i < k; ++i) {
    for (int j = 0; j < n; ++j) {
        cin >> cost[i][j];
    }
}
vector<vector<int>> dp(n, vector<int>(k, 0));
for (int j = 0; j < k; ++j) {
    dp[0][j] = cost[j][0];
}
for (int i = 1; i < n; ++i) {
    int min1 = INT_MAX, min2 = INT_MAX;
    int color_min1 = -1;
    
    for (int j = 0; j < k; ++j) {
        if (dp[i-1][j] < min1) {
            min2 = min1;
            min1 = dp[i-1][j];
            color_min1 = j;
        } else if (dp[i-1][j] < min2) {
            min2 = dp[i-1][j];
        }
    }
    for (int j = 0; j < k; ++j) {
        if (j != color_min1) {
            dp[i][j] = cost[j][i] + min1;
        } else {
            dp[i][j] = cost[j][i] + min2;
        }
    }
}

int min_cost = INT_MAX;
for (int j = 0; j < k; ++j) {
    if (dp[n-1][j] < min_cost) {
        min_cost = dp[n-1][j];
    }
}

cout << min_cost << endl;

return 0;

}


评论:

请先登录,才能进行评论