3.1概述
核心思想: 动态规划是计算机中解决最优化问题的一种方法 通过避免重复节点的计算来提高计算速度 使用字典或者哈希表保存计算中间结果,因此也称之为【记忆化搜索】 这也是动态算法是一种用空间换时间的策略经典案例: 给定一个无序数组,找出其中最长的、递增的子序列的长度 思路: 暴力搜索: 定义一个函数 L(arrs,i), 返回从数组第i个长度开始的最长序列的长度 具体如下: public int L(int[] arrs, int i) { for(int j=i+1;j<arrs.length;j++) { if(arrs[j]>arrs[i]) { return L(j) + 1; } } } 遍历数组,找最长的递增子序列长度 public int R(int[] arrs) { int max_length = 1; for(int i = 0; i<arr.length; i++) { max_length = max(max_length, L(arrs, i)) } return } 给定一个无序数组,找出其中连续子序列的最大和动态规划算法的一般思路: 穷举法/暴力搜索 如果发现大量重复计算 就用哈希表将中间计算结果保存下来 之后遍历到相同节点,直接从哈希表取值