算法题型当中应该说最难的就是动态规划啊,贪心算法很大程度上取决于贪心策略,所以动态规划整体上比贪心应用更广泛,且贪心未必能找到最优解,但动态规划一定可以找到最优解。
一般运用动态规划的地方有以下特征:
①求最值
②序列连续/序列不连续
③每一步都要取到局部最优值
从硬币和相等子序列问题中,发现一个trick:
如果要求数组中的个数不限:从小到大遍历(可以保证一个数可以取多次);若个数有限定:从大到小遍历(数只能取一次);
具体参考:
https://blog.youkuaiyun.com/Czyaun/article/details/103574504
https://blog.youkuaiyun.com/Czyaun/article/details/103641654
另外,如果要求我们求解最优的路径,而不是极值,可以采用类似于弗洛伊德的思路,每个元素可以用pair键值对进行存储对应的极值和上一个的坐标,这样就可以回溯查找到对应的路径;具体参考:
https://blog.youkuaiyun.com/Czyaun/article/details/103400575
例如:前两个条件都满足,但不满足第三个,即当前取到的最优值不是最终结果的最优值