第三章作业

动态规划算法的基本思想与分治法类似,也是将待求解的问题分解为若干个子问题(阶段),按顺序求解子阶段,前一子问题的解,为后一子问题的求解提供了有用的信息。在求解任一子问题时,列出各种可能的局部解,通过决策保留那些有可能达到最优的局部解,丢弃其他局部解。依次解决各子问题,最后一个子问题就是初始问题的解。

第一题递归:

for(int i = 1; i <= n; i++){

    for(int j = 0; j <= i; j++){

      if(num[i]>num[j])

        dp[i] = dp[i]>dp[j]+1?dp[i]:dp[j]+1;

    }

    max = max>dp[i]?max:dp[i];

  }

第二题:

for(int i = 1; i < n; i++){

        for(int j = i+1; j <= n; j++){

            cin >> f[j];

            if(i==1)

                dp[j] = f[j];

            else

                dp[j] = dp[j]<f[j]+dp[i]?dp[j]:f[j]+dp[i];

        }

    } 

结队心得:

首先是各自做一下题目看各自的想法有什么不一样,或者是很一致的地方,然后再去选择是我的方法更好还是队友的方法更加简洁明了有效,然后互相吸取经验,完成题目。

posted on 2018-10-28 20:35  吕涵宇  阅读(101)  评论(0编辑  收藏  举报