一 . 对动态规划算法的理解
动态规划同分治法类似,也是将问题分成子问题,先求解子问题,但是动态规划的问题中,分解后的子问题不是独立的,所以,用一个表来记录已解决的子问题,不管这个解在后续的过程中会不会用到,都将它填入表中。
步骤:
找出最优解的性质,递归的定义最优值,自底向上的计算最优值。
并且动态规划算法具有的两个重要的性质:最优子结构和子问题重叠
二 . 编程题
1 . 递归方程:
longest[ i ] = max{longest[ j+1 ],longest [ i ]}
代码:
int maxlist(int shuzu[], int len) { int longest[len]; for (int i=0; i < len; i++) longest[i] = 1; for (int j=1; j < len; j++) { for (int i=0; i<j; i++) { if (shuzu[j] > shuzu[i] && longest[j] < longest[i]+1){ longest[j] = longest[i] + 1; } } } int max = 0; for (int j=0; j < len; j++) { if (longest[j] > max) { max = longest[j]; } } return max; }
2 . 递归方程:
m[ i ][ j ] = max(m[ i, k ]+ m[ k ][ j ])
代码:
三 . 结对编程情况
对于动态规划还不是很熟练,和队友编程时求解一道题要花很长的时间,要多多练习,与队友多讨论,交换思路共同理解问题。
原文:https://www.cnblogs.com/Ygrittee/p/9940365.html