[AcWing] 1018. 最低通行费(C++实现)数字三角形模型
1. 题目
2. 读题(需要重点注意的东西)
读题: 从左上角走到右下角,商人必须在 (2N−1) 个单位时间
穿越出去===》即只能向右或者向下走
,走到终点时的最小
值是多少?
思路:
因此本题满足数字三角形模型的特征;
相当于在[AcWing] 1015. 摘花生(C++实现)数字三角形模型模板题的基础上进行了变换,即将求最大值变为了最小值。
本题需要唯一注意的是:
由于是求最小值,因此在边界时,由于会出界,不加判断的话就会取超过边界的值为0,就会出错,因此需要判断i == 1
和 j == 1
的边界条件,当i == 1
时,只能向右走;当j == 1
时,只能向下走。
3. 解法
---------------------------------------------------解法---------------------------------------------------
#include<iostream>
using namespace std;
const int N = 110;
int f[N][N];
int w[N][N];
int main(){
int n;
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] = min(f[i-1][j],f[i][j-1]) + w[i][j];
if(i == 1) f[i][j] = f[i][j - 1] + w[i][j];
if(j == 1) f[i][j] = f[i - 1][j] + w[i][j];
}
cout << f[n][n] ;
}
可能存在的问题
4. 可能有帮助的前置习题
5. 所用到的数据结构与算法思想
- 动态规划
- 数字三角形模型
6. 总结
数字三角形模型模板题,可以发展为不同的数字三角形题目
数字三角形模型的特征:
1. 从左上角走到右下角
2. 走一条或n条路径
3. 取最大值或最小值