程序员必备十大算法-动态规划-数字三角形-优化版(参考北大郭伟老师)

本文探讨动态规划这一复杂算法,强调其在寻找子问题最优解中的应用。以数字三角形问题为例,介绍了如何构建初始化条件和转移方程来解决最值问题。适合已对基础算法有一定了解的C++程序员深入学习。
摘要由CSDN通过智能技术生成

动态规划是十大算法中最难的一个算法,在于算法没有固定的模板,但是核心的思想是一致的,之能总结出几种常见的dp。我们以数字三角形为题先引入动态规划的思想
动态规划在网络上的资料都很多,都是众说纷纭,今天我也总结一下动态规划的一些心得吧
首先:动态规划的使用范围是和贪心算法的思想一样,就是在子问题上的最优解到整体的最优解,可以写成递归的,递推的题都可以写成dp;
常见的要用到dp的题目的明显标记是
1、求最值
最大上升子序列
最长公共子序列
从m个单位中选出n个使之最佳(max,min);
2、是否存在
当然了,还有其他的,就不一一总结了(你们可以偷偷的告诉博主的)
当判断出是动态规划
1、构建初始化条件
2、构建条件转移方程
注意是从后到前求解还是从前到后(看转移方程)
数字三角形的题意是从上到下找到一条线可以让累加的数最大(最值问题,考虑一下是不是dp)只能走正下一个或者右下角

//动态规划-数字三角形 
#include<bits/stdc++.h>
using namespace std
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值