动态规划及简单实例

本文介绍了动态规划的概念及其在解决实际问题中的应用,包括求解矩阵上路径最大收益和找到最长回文子序列的动态规划算法。通过分析问题并建立状态转移方程,给出了具体的Java代码实现。
摘要由CSDN通过智能技术生成

一、动态规划

动态规划通常是用来求最优解问题的一种思路或方法。动态规划的基本思想是将要求解的问题分为若干子问题,当前子问题的最优解可以从上次子问题的解推出,从而求出原问题的最优解。
动态规划求解过程可简单分为两个步骤:前一子问题求出解时的状态和前一子问题到当前子问题的状态转移方程。

二、简单实例

最近遇到的使用动态规划求最优解的两个问题
1、在m*n的矩阵上,从左上角出发,每步只能向下走或向右走,每个位置上有一个数,将行走路线上所有经过的位置上的数值求和,求到达右下角时可以获得的最大值。
运用动态规划思想进行分析:到达第(i,j)位置时的最大值应该等于前一步(可能是(i-1,j)或(i,j-1))获得的最大值加上(i,j)位置的值(0 <= i < m, 0 <= j < n)。

算法思路如下:

(1)设每个位置的值为num[i][j],定义数组max[i][j]来存储每个位置的最大值;
(2)i=0,j=0;时,max[i][j] = num[i][j];(计算起始点)
(3)i=0,j!=0;时,max[i][j] = max[i][j-1] + num[i][j];
i!=0,j=0;时,max[i][j] = max[i-1][j] + num[i][j];(计算两条边界)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值