tt

using namespace std;
typedef long long ll;
const ll M = 305, inf = 1e18;
ll n, m, cost, dp[M];
ll mv = inf, sv = inf, mi;             //最小值、次小值、最小值的下标
int main() {
	n = read(), m = read();
	for (int i = 1; i <= n; i++) {
		for (int j = 1; j <= m; j++) {
			cost = read();
			if (i == 1)       //边界状态
				dp[j] = cost;
			else {            //非边界状态
				if (j != mi)  //若当前颜色非前一天最值的颜色
					dp[j] = mv + cost; //从前一天最值转移
				else          //若当前颜色是前一天最值颜色
					dp[j] = sv + cost; //从前一天次值转移
			}
		}
		mv = inf, sv = inf;    //初始化最值
		for (int j = 1; j <= m; j++)
			if (mv > dp[j]) {  //获取第i天状态的最小和次小值
				sv = mv;
				mv = dp[j];
				mi = j;
			} else if (sv > dp[j])
				sv = dp[j];
	}
	write(mv);
	return 0;
}`
posted @ 2025-07-28 19:24  KuaiZz  阅读(17)  评论(0)    收藏  举报