显示原始代码
#include <bits/stdc++.h>
using namespace std;
long long a[1010][1010], dp[1010][1010];
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
int w, h, c;
long long minn = 1000000000000000000ll;
cin >> w >> h >> c;
for (int i = 1; i <= w; ++i) {
for (int j = 1; j <= h; ++j) {
cin >> a[i][j];
dp[i][j] = a[i][j];
if (i > 1) {
if (dp[i][j] >= dp[i - 1][j] + c) {
dp[i][j] = dp[i - 1][j] + c;
}
if (j > 1 && dp[i][j] >= dp[i - 1][j - 1] + 2 * c) {
dp[i][j] = dp[i - 1][j - 1] + 2 * c;
}
if (j < h && dp[i][j] >= dp[i - 1][j + 1] + 2 * c) {
dp[i][j] = dp[i - 1][j + 1] + 2 * c;
}
minn = minn < dp[i - 1][j] + c + a[i][j] ? minn : dp[i - 1][j] + c + a[i][j];
minn = minn < dp[i - 1][j - 1] + 2 * c + a[i][j] ? minn : dp[i - 1][j - 1] + 2 * c + a[i][j];
minn = minn < dp[i - 1][j + 1] + 2 * c + a[i][j] ? minn : dp[i - 1][j + 1] + 2 * c + a[i][j];
}
if (j > 1) {
if (dp[i][j] >= dp[i][j - 1] + c) {
dp[i][j] = dp[i][j - 1] + c;
}
minn = minn < dp[i][j - 1] + c + a[i][j] ? minn : dp[i][j - 1] + c + a[i][j];
}
cout << minn << " ";
}
cout << "\n";
}
cout << minn;
return 0;
}