许诺 • 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;
}
评论:
请先登录,才能进行评论