洛谷 P1130 红牌 (尚贤)

题目:https://www.luogu.com.cn/problem/P1130

代码:

/*
看到那么多人写顺推,还没有一个人写逆推,我就来贡献一下吧滑稽
题目中说的是小组 “I更换到小组I+1,当然从小组M可以更换到小组1”逆推就变成了“I更换到小组I-1,当然从小组1可以更换到小组M”这是不用证明的,自己手推一下样例就行了QAQ
从倒数第2步考虑,取两种方案中最小的一种,然后一直做到第一步,找最小值
*/
#include <iostream>
#include <cstdio>
#define INF 0x3f3f3f3f
#define BIG_INF 0x7fffffff
#define min(a, b) ((a < b) ? a : b)
#define max(a, b) ((a > b) ? a : b)
#define Cint const int
#define SIZE (int)2e3 + 10
using namespace std;
int dp[SIZE][SIZE];

void print_dp(Cint &, Cint &);
int main() {
	freopen("cpp.in", "r", stdin);
	freopen("cpp.out", "w", stdout);
	int n, m, ans = BIG_INF;
	scanf("%d%d", &n, &m);
	for (int i = 1; i <= m; ++i) {
		for (int j = 1; j <= n; ++j) {
			scanf("%d", &dp[j][i]); // 第j天,第i个小组 
		}
	}
	for (int i = n - 1; i >= 1; --i) {
		for (int j = 1; j <= m; ++j) {
			dp[i][j] += min(dp[i + 1][j], ((j == m) ? dp[i + 1][1] : dp[i + 1][j + 1]));
			if (i == 1) {
				ans = min(ans, dp[i][j]);
			}
		}
	}
	printf("%d\n", ans);
	return 0;
}
发布了33 篇原创文章 · 获赞 0 · 访问量 167

猜你喜欢

转载自blog.csdn.net/weixin_42790071/article/details/105491477