Acwing-----1018. 最低通行费

算法

  • 状态表示:(f(i, j))
    集合:所有从 ((1, 1))((i, j)) 的路线
    属性:Min
  • 状态计算:集合的划分
    (f(i, j)) 根据只能向东走和向南走分为 (f(i-1, j))(f(i, j-1))
    需要进行特判是否为边界点

代码

#include <iostream>
using namespace std;

const int N = 110, INF = 1e9;
int n;
int w[N][N], f[N][N];

int main() {
    cin >> n;
    for (int i = 1; i <= n; ++i) {
        for (int j = 1; j <= n; ++j) {
            cin >> w[i][j];
        }
    }
    
    for (int i = 1; i <= n; ++i) {
        for (int j = 1; j <= n; ++j) {
            if (i == 1 && j == 1) f[i][j] = w[i][j];
            else {
                f[i][j] = INF;
                if (i > 1) f[i][j] = min(f[i][j], f[i - 1][j] + w[i][j]);
                if (j > 1) f[i][j] = min(f[i][j], f[i][j - 1] + w[i][j]);
            }
        }
    }
    cout << f[n][n] << endl;
    return 0;
}
原文地址:https://www.cnblogs.com/clown9804/p/12561584.html