代码随想录Day40

Day 40 动态规划 part03

今日任务

    1. 整数拆分
  • 96.不同的二叉搜索树

代码实现

  1. 整数拆分
    public int integerBreak(int n) {

        int[] dp = new int[n + 1];
        dp[2] = 1;
        for (int i = 3; i < n + 1; i++) {
            for (int j = 1; j < i; j++) {
                dp[i] = Math.max(j * Math.max(i - j, dp[i - j]), dp[i]);
            }
        }
        return dp[n];
    }

96.不同的二叉搜索树

    public int numTrees(int n) {
        if (n < 2) return 1;
        int[] dp = new int[n + 1];
        dp[0] = 1;
        dp[1] = 1;
        dp[2] = 2;
        for (int i = 3; i < n + 1; i++) {
            for (int j = 0; j < i; j++) {
                dp[i] += dp[j] * dp[i -j - 1];
            }
        }
        return dp[n];
    }

今日总结

  1. 目前所做的动态规划本质上还是在找规律,如何从dp数组的前一种状态推出dp数组的下一种状态,目前的都还比较简单,背包问题就比较难了;
  2. 今天大涨,我不出意外的话,今天又会是4月涨的最好的一天。

你可能感兴趣的:(java,代码随想录,动态规划)