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;
}
posted @ 2020-03-24 20:25  景云ⁿ  阅读(157)  评论(0)    收藏  举报