1.按照动态规划法的求解步骤分析作业题目“数字三角形”:
1.1设a[][]=三角形第i行第j列的值(0<=i<n,0<=j<=i)
定义:dp[i][j]=从(i,j)出发到底边的最大路径和
递归方程式:dp[i][j] = a[i][j] + max(dp[i+1][j], dp[i+1][j+1])
边界条件:dp[n-1][j] = a[n-1][j] (0 ≤ j ≤ n-1)
1.2表的维度:二维表 dp[i][j],大小n×n
填表范围:0<i<n-1, 0<j<i
填表顺序:从最后一行往上到第0行
最优值:dp[0][0]
1.3时间复杂度:1+2+3+......+n = n*(n+1)/2 = O(n^2)
空间复杂度:用了二维数组所以是 O(n^2)
2.动态规划算法基本思想是将原问题分解成若干个子问题,通过逐步求解子问题来得到原问题的解。一般来说动态规划算法的流程都是:先找出最优解的性质,然后写出递归方程,再通过自下而上的方式算出最优解,最后通过若干个子问题的最优解求出原问题的最优解。我认为在使用动态规划解决问题是最重要的点是找出问题的规律,寻找重复计算的模式。在解题时容易被看起来很复杂的问题吓到,但是找到最优子结构,列出递归方程式后问题便迎刃而解。