为什么要引进DP
在我们所做的很多题目中,贪心算法都是必不可少的。但是贪心的时间复杂度极高,很有可能会超时,所以我们就需要一种更快捷和简便的方法——DP。
什么是DP
DP全名动态规划,顾名思义,就是在动态中调整数据,主要核心是推导出状态转移方程,再通过循环的方式来将数据赋值给数组。
线性DP
数塔问题
贪心
本题如果运用贪心算法,就会在过程中出错,因为当前最佳解并不一定是全局最佳解。
DP
用DP的方法,就是枚举出每一个路径的数值,然后再求出最大值。但是,比较起暴力的方法的话,它并不是一味的枚举,而是通过一个状态转移方程来求。
从题面可知,每一个格子=左上角的格子+正上方的格子。
得出方程:a[i][j] = a[i - 1][j - 1] + a[i - 1][j];
再用两个循环求出答案即可
for(int i = 1; i <= n; i++){
for(int j = 1; j <= n; j++{
a[i][j] = a[i - 1][j - 1] + a[i - 1][j];
}
}
过程中求最大值;
for(int i = 1; i <= n; i++){
for(int j = 1; j <= n; j++{
a[i][j] = a[i - 1][j - 1] + a[i - 1][j];
}
}
区间DP
顾名思义,区间DP就是在寻找一个区间的状态转移方程,具体请看题
石子合并1
石子合并2