注意事项:
本题为线性dp—数字三角形的扩展题。

题目:
一个商人穿过一个 N×N 的正方形的网格,去参加一个非常重要的商务活动。
他要从网格的左上角进,右下角出。
每穿越中间 1 个小方格,都要花费 1 个单位时间。
商人必须在 (2N−1) 个单位时间穿越出去。
而在经过中间的每个小方格时,都需要缴纳一定的费用。
这个商人期望在规定时间内最少费用穿越出去。
请问至少需要多少费用?

注意:不能对角穿越各个小方格(即,只能向上下左右四个方向移动且不能离开网格)。

输入格式
第一行是一个整数,表示正方形的宽度 N。
后面 N 行,每行 N 个不大于 100 的正整数,为网格上每个小方格的费用。

输出格式
输出一个整数,表示至少需要的费用。

数据范围
1≤N≤100

输入:
5
1  4  6  8  10
2  5  7  15 17
6  8  9  18 20
10 11 12 19 21
20 23 25 29 33
输出:
109
#include <iostream>
#include <cstring>using namespace std;
const int N = 110;
int n;
int a[N][N], f[N][N];int main()
{//读入cin >> n;for (int i = 1; i<=n; i++) {for (int j = 1; j<=n; j++) cin >> a[i][j];}//初始化DP数组f,使每个元素为最大值,以便后面的计算时比较得出较小的费用for (int i = 0; i<=n; i++) memset(f[i], 0x3f3f3f3f, sizeof f[i]);  //线性DPfor (int i = 1; i<=n; i++) {for (int j = 1; j<=n; j++) {if (i == 1 && j == 1) f[1][1] = a[1][1];  //第一个点的费用赋值else {//如果i>1,则可以从上面走过来,比较上面的路径费用和当前路径费用的大小,并取较小值if (i > 1) f[i][j] = min(f[i-1][j] + a[i][j], f[i][j]);//如果j>1,则可以从左面走过来,比较左面的路径费用和当前路径费用的大小,并取较小值if (j > 1) f[i][j] = min(f[i][j-1] + a[i][j], f[i][j]);}}}cout << f[n][n] << endl;  //输出最小费用return 0;
}

思路:
经典的线性dp问题,y式dp分析即可

1.状态表示
f[i][j] 表示从起始点到(i, j)点的所有方案费用,属性为Min

2.状态计算
由于有步数限制(2N-1),意味着我们只能从起始点向下或者向右移动,那么在进行dp计算时,对于点(i,j)我们是从这个点的上方和左侧来进行计算,也就是:
f[i][j] = Min(f[i-1][j],f[i][j-1]) + a[i][j]
代码中根据这个来进行一定的小调整即可

声明:
算法思路来源为y总,详细请见https://www.acwing.com/
本文仅用作学习记录和交流

C++---数字三角形模型---最低通行费(每日一道算法2023.1.14)相关推荐

  1. C++---最长上升子序列模型---导弹防御系统(每日一道算法2023.3.5)

    注意事项: 本题的dp:"线性dp-最长上升子序列的长度" 本题的贪心(单调队列):"最长上升子序列模型-拦截导弹" 下面思路只讲如何运用这些东西来解这道题 强 ...

  2. C++---状态压缩dp---玉米田(每日一道算法2023.4.16)

    注意事项: 本题为"状态压缩dp-蒙德里安的梦想"和"状态压缩dp-小国王"的近似题,建议先阅读这两篇文章并理解. 题目: 农夫约翰的土地由 M×N 个小方格组 ...

  3. [AcWing] 1018. 最低通行费(C++实现)数字三角形模型

    [AcWing] 1018. 最低通行费(C++实现)数字三角形模型 1. 题目 2. 读题(需要重点注意的东西) 3. 解法 4. 可能有帮助的前置习题 5. 所用到的数据结构与算法思想 6. 总结 ...

  4. 【动态规划专题】数字三角形模型

    题目 算法 AcWing 1015. 摘花生 简单线性DP.数字三角形模型 AcWing 1018. 最低通行费 数字三角形模型 AcWing 1027. 方格取数 四维DP AcWing 275. ...

  5. 动态规划之数字三角形模型

    数字三角形模型 前言 最低通行费 方格取数 传纸条 前言 数字三角形题型的一般描述是: 给定一个共有N行的三角矩阵A,其中第t行有X列.从左上角出发,每次可以向下方或右下方走一步,最终到达底部求把经过 ...

  6. 问题描述 给定一个由n行数字组成的数字三角形如下图所示。试设计一个算法,计算出从三角形的顶至底的一条路径,使该路径经过的数字总和最大。 对于给定的由n行数字组成的数字三角形,计算从三角形的顶至底

    问题描述 给定一个由n行数字组成的数字三角形如下图所示.试设计一个算法,计算出从三角形的顶至底的一条路径,使该路径经过的数字总和最大. 对于给定的由n行数字组成的数字三角形,计算从三角形的顶至底的路径 ...

  7. php算法在线刷题,c,算法_每日一道算法:leetcode 刷题碰到的问题。,c,算法 - phpStudy...

    每日一道算法:leetcode 刷题碰到的问题. 这是题目: Given an unsorted array nums, reorder it such that nums[0] < nums[ ...

  8. 数字三角形路径最小值c语言题目,算法学习——动态规划之点数值三角形的最小路径...

    算法描述在一个n行的点数值三角形中,寻找从顶点开始每一步可沿着左斜或者右斜向下直到到达底端,使得每个点上的数值之和为最小 右图为一个4行的点数值三角形 算法思路接收用户输入行数n 使用一个二维数组a[ ...

  9. 怎么判断一个字符串的最长回文子串是否在头尾_每日一道算法题,让你的头脑更活跃(寻找最长回文子串)...

    前言 最近准备把算法慢慢的捡起来,所以准备日更一道算法题目,难度自然是由简入难,所以同学们可以每天都来看看小编的更新. 日更时间定在每晚20:00,希望大家多多关注啦. 昨天就欠更了,简直就是打脸.过 ...

最新文章

  1. 维基百科上的算法和数据结构链接很强大
  2. Linux CENTOS7 Linux流量监控工具-iftop 安装过程以及示例!
  3. 查找数组中任一峰值的下标
  4. npm:can not find module 'xxx'
  5. GitHub发布桌面版但不包括Linux
  6. Docker : 数据卷(创建、挂载、查看、删除)
  7. DR.com客户端解密过程逆向分析
  8. Python学习(十)Python 函数
  9. row number函数_窗口函数介绍及案例实战
  10. 上网行为管理系统服务器区域,上网行为管理服务器
  11. matlab低通滤波器库函数代码_Matlab中模拟低通滤波器的函数
  12. 圣地亚哥分校 计算机,加州大学圣地亚哥分校计算机怎么样?
  13. matlab电力建模仿真软件,MATLAB/Simulink电力系统建模与仿真
  14. 通过负载均衡器+域名实现容灾切换-(11)深信服负载均衡器
  15. raspberry pi到手,折腾成web服务器,加小小鄙视下网通
  16. Ensemble Average(系综平均)(集平均)
  17. 奶牛专题2:奶牛晒衣服
  18. 牧牛区块链培训,区块链对社会生产的五大好处
  19. 基于Zotero和坚果云的大规模文献同步管理环境配置及常用功能介绍(超详细)
  20. hyperf搭建与使用RPC微服务

热门文章

  1. js之split与join的区别
  2. Google的开始--剖析大规模超文本网络搜索引擎
  3. 互联网协议安全IPSec
  4. 什么是社交新零售系统?社交新零售系统如何缓解企业卖货难题?
  5. 用c语言写一个背景为黑色,烟花绽放的页面,页面中间为新年倒计时,下一行为祝福话语...
  6. spingboot2.0以上利用YUI Compressor Maven结合压缩混淆JS/CSS
  7. 完美替代360流氓软件,打造一套完美的防御体系
  8. html之编写表格(个人信息)
  9. 微信小程序开发实现搜索功能
  10. 有人4G模块7S4串口配置