对动态规划的思考
如何确定一类的算法问题可以用动态规划的方式,首先就是抓住算法题的最优结果,是否可以从前往后,从上到下,算法的最优结果是否可以由先前的最优化结果推出来,也就是最优的子结构,用dp数组的形式逐渐递推到最终的最优结果。例如01背包问题,数塔问题。
还有一种是问题具有重复的计算,问题的求解种重复的计算浪费了大量的资源。这时候就是属于有重复的子问题,可以用一个数组dp保存已经计算过的结果,以减少时间的复杂度,这也是一种剪枝的技巧。例如递归的求解斐波那契数列。
if (dp[i]==1){
表示已经计算过了,直接就使用dp[i];
}else{
计算它的结果;
}