题解:P12613 [CCC 2025 Junior] Connecting Territories
kuaiCreator · · 题解
题目大意
给定一个
解题思路
考虑DP。
定义状态
用
分解子问题
其中
边界状态
问题答案
效率分析
时间复杂度和空间复杂度都为
分析完发现
代码实现
#include <bits/stdc++.h>
#define ll long long
using namespace std;
ll r, c, m, dp[2][20005], ans = 1e18, a;
int main() {
cin >> r >> c >> m;
memset(dp, 0x3f, sizeof dp);
for (int j = 1; j <= c; j++)
dp[0][j] = 0;
for (int i = 1; i <= r; ++i) {
int now = i & 1, bef = (i - 1) & 1; //当前行和上一行的奇偶
for (int j = 1; j <= c; ++j) {
a++;
if (a > m) a = 1;
dp[now][j] = min(dp[bef][j], min(dp[bef][j - 1], dp[bef][j + 1])) + a;
if (i == r) ans = min(ans, dp[now][j]);
}
}
cout << ans;
return 0;
}