目录
1.解决什么类型问题
1.1 计数问题
如最典型的青蛙跳,也就是斐波那契数列、棋盘路径问题、
还有组合公式,不重复组合( Combination ),c(n, m)从n个选手中选出m个出道~(101哈哈哈哈哈),有多少种可能性?这个问题可以分解为两个子问题,根据最后一个人能不能进组合有两种可能:
最后一个人出道,剩余席位是m-1, 子问题是c(n-1, m-1)
最后一个人不能出道,剩余席位还是m,子问题是c(n-1,m)
|
这一类问题通常递推公式是子问题的和,c(n, m) =c(n-1, m-1) + c(n-1, m),边界就是m=1或者n=1。
1.2 极值问题
如背包问题,就是多阶段最优决策。一般由初始状态开始,通过对中间阶段决策的选择,达到结束状态。这些决策形成了一个决策序列,同时确定了完成整个过程的一条决策路径。
初始状态→│决策1│→│决策2│→…→│决策n│→结束状态
如棋盘最大和(最小和),从(0,0) 到 (n-1,n-1)路上数值最大和
这一类问题通常递推公式是子问题max、min值,如上题c[i][j] = max(c[i-1][j], c[i][j-1]) + a[i][j];
还有最长递增子序列、最少找零问题、最大子数组等等,更多问题和详情可见top15动态规划