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