所谓动态规划,是指将一个问题拆解为多个子问题,最后通过解决子问题来解决问题。

    最优子结构:即通过的得到子问题的最优解来计算问题的最优解。

    最长上升子序列:

    1. public int lengthOfLIS(int[] nums) {
    2. int[] dp = new int[nums.length];
    3. dp[0] = 1;
    4. int maxDeep = 1;
    5. for(int i = 1,len=nums.length;i< len;i++){
    6. dp[i] = 1;
    7. for(int j=0; j <i ;j++){
    8. if(nums[i] > nums[j]){
    9. int dpNum = dp[j] + 1;
    10. if(dp[i] < dpNum){
    11. dp[i] = dpNum;
    12. }
    13. }
    14. }
    15. if(dp[i] > maxDeep){
    16. maxDeep = dp[i];
    17. }
    18. }
    19. return maxDeep;
    20. }