dp动态规划_最短路径累加和最大问题
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5
在上面的数字三角形中寻找一条从顶部到底边的路径,使得
路径上所经过的数字之和最大。路径上的每一步都只能往正下或
右下走。只需要求出这个最大和即可,不必给出具体路径。
#include <iostream>
using namespace std;
#define MAX 101
// 7
// 3 8
// 8 1 0
// 2 7 4 4
// 4 5 2 6 5
// 在上面的数字三角形中寻找一条从顶部到底边的路径,使得
// 路径上所经过的数字之和最大。路径上的每一步都只能往正下或
// 右下走。只需要求出这个最大和即可,不必给出具体路径。
int D[MAX][MAX]; //D和maxSum数组是101*101正方形状的二维数组
int maxSum[MAX][MAX];//可以先从主函数看起
void DP(int row)
{for(int i = 1; i <= row; ++i){//将D这个二维数组复制给 maxSum这个二维数组 maxSum[row][i] = D[row][i];}for(int i = row - 1; i >= 1; --i){for(int j = 1; j <= i; ++j){//将数组正下方和右下方的数组进行比较,挑选出大的加上上次最大累加和数组的值 为当前最大累加和值 maxSum[i][j] = max(maxSum[i + 1][j], maxSum[i + 1][j + 1]) + D[i][j];}}cout << maxSum[1][1] << endl; //输出最大累加和
}
int main()
{ int b[15] = {7, 3, 8, 8, 1, 0, 2, 7, 4, 4, 4, 5, 2, 6, 5};//按照题目要求先把15个数按照顺序依次存储到b数组里 int c = 0;//再从b数组遍历选取数字依次输入那个二维数组里for(int i = 1; i <= 5; ++i){for(int j = 1; j <= i; ++j){D[i][j] = b[c];//输入D这个二维数组里//i是行数,j是列数 ++c;}}DP(5);//因为这个三角形只有5层,所以输入为5 return 0;
}
这里的解题关键在于自低向上的迭代结果,不断的删除掉"不可能的数据"开介绍求解的计算量。
从动态规划的条件来论述:
1、最优子结构性质:一个最优化策略的子策略总是最优的。这句可以这么理解,我们知道最大路径必定是先经过顶点的,之后再经过顶点的左、右节点中的一个。因为顶点是固定的,相对于左右子节点来说是一样的,那么如果最大路劲经过的是左节点,那么左节点代表的最优解相对于右节点代表的最优解来说是一个更优解。因为左右子节点就包含了所有的解。所以左节点是最优解。
2、无后效性:每一个状态都代表了过去历史的一个完整总结。
3、子问题的重叠性:动态规划的关键在于解决冗余,本问题中表现出来的就是在向上迭代的过程中,删除了一些不可能成为最优解的数据,从而减少了求解的运算量,并复用了当前“尚且有希望"的解。
创作不易,希望读者多多支持,点赞关注,谢谢
dp动态规划_最短路径累加和最大问题相关推荐
- dp动态规划_最长上升子序列问题
例题 最长上升子序列 一个数的序列ai,当a1 < a2 < ... < aS的时候,我们称这个序列是上升的. 对于给定的一个序列(a1, a2, ..., aN),我们可以得到一 ...
- DP动态规划企业级模板分析(数字三角,上升序列,背包,状态机,压缩DP)
前言 经过基础的算法模型讲解和题海战术,将DP动态规划这个重点呢考纲进行细分题类型,此篇是上半章节的DP动态分析提升题.主要包括数字三角形,以及最大上升序列,背包问题,状态机的拆分以及优化状态机的压缩 ...
- (转)dp动态规划分类详解
dp动态规划分类详解 转自:http://blog.csdn.NET/cc_again/article/details/25866971 动态规划一直是ACM竞赛中的重点,同时又是难点,因为该算法时间 ...
- python动态规划算法最大k乘积_C语言使用DP动态规划思想解最大K乘积与乘积最大问题...
最大K乘积问题设I是一个n位十进制整数.如果将I划分为k段,则可得到k个整数.这k个整数的乘积称为I的一个k乘积.试设计一个算法,对于给定的I和k,求出I的最大k乘积. 编程任务: 对于给定的I 和k ...
- DP动态规划-爬塔(双层dp)
DP动态规划-爬塔(双层dp) 比赛来源:牛客 - 中国计量大学现代科技学院第四届"中竞杯"程序设计校赛 题目--------F题 description: 高川最喜欢的游戏当属 ...
- 数据结构和算法——用动态规划求解最短路径问题
一.动态规划求解问题的思路 在<算法导论>上,动态规划的求解过程主要分为如下的四步: 描述最优解的结构 递归定义最优解的值 按自底向上的方式计算最优解的值 由计算出的结果构造一个最 ...
- DP动态规划--最大子段和问题
DP–最大子段和问题(动态规划) 问题: 有n个整数组成一个a1,a2,a3,- ,an序列.求其子段和的最大值(子段是连续的) 比如{-2,11,-4,13,-5,-2},最大子段和就是11-4+1 ...
- C++入门算法1——dp(动态规划)
dp(动态规划)是十分重要的一个算法,一般来说这种算法会比dfs(深度优先搜索)快很多. 首先先来看一道例题 题目链接:P1048 [NOIP2005 普及组] 采药 - 洛谷 | 计算机科学教育新生 ...
- 动态规划求解最短路径问题
一.需求背景 现有一张地图,各结点代表城市,两结点间连线代表道路,线上数字表示城市间的距离.如下图所示,请找出从起点A到终点E的最短距离. 二.算法描述 利用动态规划的思想,求解最短路径问题,算法过程 ...
最新文章
- WslRegisterDistribution failed with error: 0x8007019e The Windows Subsystem for Linux optional compo
- 【 D3.js 入门系列 --- 9 】 常见可视化图形
- 直接调用支持ACE的product search API
- Effective C++ .07 virtual析构函数的提供
- 自学Python能干些什么副业
- AIX ORACLE 迁移到ASM
- SSH复用代码最终版
- 如何使用IDEA自带的数据库连接工具连接达梦数据库,IDEA连接DM(达梦)数据库
- sql sever 插入数据
- 使用ffmpeg简单合并视频(2个以上)
- 算法学习(五)—— 广度优先搜索
- pandas中category类型的数据处理
- workerman执行busy,http请求不返回导致阻塞
- Windows Server搭建SAN存储服务(iSCSI)
- 记——博客后台管理系统
- java eclipse生成apk,将Eclipse Android项目打包成APK文件
- 统计学--从对P值的理解谈起
- Erupt Framework:开源神器,助你无需前端代码搞定企业级后台管理系统
- PC机组成——内存储器
- 嵌入式计算机的关键特征,与通用计算机的区别
热门文章
- 21天学通python-21天学通Python(第2版)
- python3.6.5安装步骤-Centos7 安装Python3.6.5步骤
- python在线朗读-使用python编写一个语音朗读闹钟功能的示例代码
- python数据分析-如何学习和评价《利用python进行数据分析》这本书?
- python模板代码替换_Python - 安全替换字符串模板(safe_substitute) 详细解释
- Redis--高并发之分布式锁
- Vscode 调试:跟踪局部变量的变化
- redhat linux 7 ntp,技术|RHCE 系列(十):在 RHEL/CentOS 7 中设置 NTP(网络时间协议)服务器...
- android camera预览帧,android camera2处理每一帧并显示其预览
- 数据结构折半查找例题_山东2011专升本计算机专业数据结构练习题 - 图文