C++---数字三角形模型---最低通行费(每日一道算法2023.1.14)
注意事项:
本题为线性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)相关推荐
- C++---最长上升子序列模型---导弹防御系统(每日一道算法2023.3.5)
注意事项: 本题的dp:"线性dp-最长上升子序列的长度" 本题的贪心(单调队列):"最长上升子序列模型-拦截导弹" 下面思路只讲如何运用这些东西来解这道题 强 ...
- C++---状态压缩dp---玉米田(每日一道算法2023.4.16)
注意事项: 本题为"状态压缩dp-蒙德里安的梦想"和"状态压缩dp-小国王"的近似题,建议先阅读这两篇文章并理解. 题目: 农夫约翰的土地由 M×N 个小方格组 ...
- [AcWing] 1018. 最低通行费(C++实现)数字三角形模型
[AcWing] 1018. 最低通行费(C++实现)数字三角形模型 1. 题目 2. 读题(需要重点注意的东西) 3. 解法 4. 可能有帮助的前置习题 5. 所用到的数据结构与算法思想 6. 总结 ...
- 【动态规划专题】数字三角形模型
题目 算法 AcWing 1015. 摘花生 简单线性DP.数字三角形模型 AcWing 1018. 最低通行费 数字三角形模型 AcWing 1027. 方格取数 四维DP AcWing 275. ...
- 动态规划之数字三角形模型
数字三角形模型 前言 最低通行费 方格取数 传纸条 前言 数字三角形题型的一般描述是: 给定一个共有N行的三角矩阵A,其中第t行有X列.从左上角出发,每次可以向下方或右下方走一步,最终到达底部求把经过 ...
- 问题描述 给定一个由n行数字组成的数字三角形如下图所示。试设计一个算法,计算出从三角形的顶至底的一条路径,使该路径经过的数字总和最大。 对于给定的由n行数字组成的数字三角形,计算从三角形的顶至底
问题描述 给定一个由n行数字组成的数字三角形如下图所示.试设计一个算法,计算出从三角形的顶至底的一条路径,使该路径经过的数字总和最大. 对于给定的由n行数字组成的数字三角形,计算从三角形的顶至底的路径 ...
- php算法在线刷题,c,算法_每日一道算法:leetcode 刷题碰到的问题。,c,算法 - phpStudy...
每日一道算法:leetcode 刷题碰到的问题. 这是题目: Given an unsorted array nums, reorder it such that nums[0] < nums[ ...
- 数字三角形路径最小值c语言题目,算法学习——动态规划之点数值三角形的最小路径...
算法描述在一个n行的点数值三角形中,寻找从顶点开始每一步可沿着左斜或者右斜向下直到到达底端,使得每个点上的数值之和为最小 右图为一个4行的点数值三角形 算法思路接收用户输入行数n 使用一个二维数组a[ ...
- 怎么判断一个字符串的最长回文子串是否在头尾_每日一道算法题,让你的头脑更活跃(寻找最长回文子串)...
前言 最近准备把算法慢慢的捡起来,所以准备日更一道算法题目,难度自然是由简入难,所以同学们可以每天都来看看小编的更新. 日更时间定在每晚20:00,希望大家多多关注啦. 昨天就欠更了,简直就是打脸.过 ...
最新文章
- 维基百科上的算法和数据结构链接很强大
- Linux CENTOS7 Linux流量监控工具-iftop 安装过程以及示例!
- 查找数组中任一峰值的下标
- npm:can not find module 'xxx'
- GitHub发布桌面版但不包括Linux
- Docker : 数据卷(创建、挂载、查看、删除)
- DR.com客户端解密过程逆向分析
- Python学习(十)Python 函数
- row number函数_窗口函数介绍及案例实战
- 上网行为管理系统服务器区域,上网行为管理服务器
- matlab低通滤波器库函数代码_Matlab中模拟低通滤波器的函数
- 圣地亚哥分校 计算机,加州大学圣地亚哥分校计算机怎么样?
- matlab电力建模仿真软件,MATLAB/Simulink电力系统建模与仿真
- 通过负载均衡器+域名实现容灾切换-(11)深信服负载均衡器
- raspberry pi到手,折腾成web服务器,加小小鄙视下网通
- Ensemble Average(系综平均)(集平均)
- 奶牛专题2:奶牛晒衣服
- 牧牛区块链培训,区块链对社会生产的五大好处
- 基于Zotero和坚果云的大规模文献同步管理环境配置及常用功能介绍(超详细)
- hyperf搭建与使用RPC微服务