1.我对动态规划算法的理解
动态规划算法与分治法相似,它的基本思想也是将待解决的问题分解成若干个子问题,然后从这些子问题的解中得到原问题的解。而动态规划算法的不同之处在于其经分解得到的子问题往往不是互相独立的;而且为了避免多次计算子问题,动态规划算法用一个表记录所有已解决的子问题的答案。
动态规划算法适合用于求解最优解问题,通常可以按照以下几个步骤设计:
(1)找出最优解的性质,并刻画其结构特征
(2)递归地定义最优解
(3)以自底向上的方式计算出最优解
(4)根据计算最优解时得到的信息,构造最优解
2.编程题1、2的递归方程
编程题1:dp[i]=max(dp[i],dp[j]+1),其中,dp[i]表示以a[i]为末位的最长单调递增子序列的长度,j<i且a[i]>a[j]
编程题2:a[i][j]=min{a[i][k]+a[k][j]},其中i<k<j
3.结对编程情况:
在游艇租用问题的解决中,我一开始没什么思路,通过和同伴讨论,慢慢找到思路:假设从从第i站到第j站的最优解是从i到k,再从k到j,即a[i][k]+a[k][j],如果a[i][k]+a[k][j]<a[i][j],就用a[i][k]+a[k][j]替代a[i][j],然后很快就可以列出递归式,从而解决问题。结对编程在一定程度上可以通过我们的相互交流帮助我们打开思维,走出瓶颈,提高了解题效率。
原文:https://www.cnblogs.com/Winnieapple/p/9892433.html