// #牛客春招刷题训练营# https://www.nowcoder.com/discuss/726480854079250432 // 一道区间动态规划 #include <iostream> #include <vector> #include <algorithm> #include <array> using namespace std; #define pre(i,j,k) for (int i = j; i < k; i++) array<int, 2> dirx{0,1},diry{1,0}; int main() { ios_base::sync_with_stdio(false),cin.tie(nullptr),cout.tie(nullptr); int n, m; cin >> n >> m; vector<vector<int>> a(n + 1, vector<int>(m + 1, 0)), dp(n + 1, vector<int>(m + 1)); pre(i,1,n + 1) pre(j,1,m + 1) cin >> a[i][j]; pre(i, 1, n + 1) dp[i][1] = a[i][1] + dp[i - 1][1];//---------对第一行进行特殊处理 pre(j, 1, m + 1) dp[1][j] = a[1][j] + dp[1][j - 1];//----------对第一列单独处理 pre(i, 2, n + 1) pre(j, 2, m + 1) dp[i][j] = min(dp[i - 1][j], dp[i][j - 1]) + a[i][j];//----------状态转移方程 cout << dp[n][m]; } // 64 位输出请用 printf("%lld")