当前位置: 首页 > news >正文

代码随想录day33 Java版

96.不同的二叉搜索树

递推公式不好想,在根节点的左右组装,从dp[0]*dp[n-1]到dp[n-1]*dp[0]累加

class Solution {
    public int numTrees(int n) {
        //初始化 dp 数组
        int[] dp = new int[n + 1];
        //初始化0个节点和1个节点的情况
        dp[0] = 1;
        dp[1] = 1;
        for (int i = 2; i <= n; i++) {
            for (int j = 1; j <= i; j++) {
                //对于第i个节点,需要考虑1作为根节点直到i作为根节点的情况,所以需要累加
                //一共i个节点,对于根节点j时,左子树的节点个数为j-1,右子树的节点个数为i-j
                dp[i] += dp[j - 1] * dp[i - j];
            }
        }
        return dp[n];
    }
}

01背包

public static void testWeightBagProblem(int[] weight, int[] value, int bagSize){

        // 创建dp数组
        int goods = weight.length;  // 获取物品的数量
        int[][] dp = new int[goods][bagSize + 1];

        // 初始化dp数组
        // 创建数组后,其中默认的值就是0
        for (int j = weight[0]; j <= bagSize; j++) {
            dp[0][j] = value[0];
        }

        // 填充dp数组
        for (int i = 1; i < weight.length; i++) {
            for (int j = 1; j <= bagSize; j++) {
                if (j < weight[i]) {
                    /**
                     * 当前背包的容量都没有当前物品i大的时候,是不放物品i的
                     * 那么前i-1个物品能放下的最大价值就是当前情况的最大价值
                     */
                    dp[i][j] = dp[i-1][j];
                } else {
                    /**
                     * 当前背包的容量可以放下物品i
                     * 那么此时分两种情况:
                     *    1、不放物品i
                     *    2、放物品i
                     * 比较这两种情况下,哪种背包中物品的最大价值最大
                     */
                    dp[i][j] = Math.max(dp[i-1][j] , dp[i-1][j-weight[i]] + value[i]);
                }
            }
        }

01背包II

用到了滚动数组进行状态压缩

public static void testWeightBagProblem(int[] weight, int[] value, int bagWeight){
        int wLen = weight.length;
        //定义dp数组:dp[j]表示背包容量为j时,能获得的最大价值
        int[] dp = new int[bagWeight + 1];
        //遍历顺序:先遍历物品,再遍历背包容量
        for (int i = 0; i < wLen; i++){
            for (int j = bagWeight; j >= weight[i]; j--){
                dp[j] = Math.max(dp[j], dp[j - weight[i]] + value[i]);
            }
        }

相关文章:

  • 高可用篇_A Docker容器化技术_V 基于DockerCompose实现容器编排
  • 蓝桥杯(3.10)
  • python基础及网络爬虫
  • Langchain-Chatchat本地搭建ChatGLM3模型和提取PDF内容
  • 【自然语言处理】【大模型】BitNet:用1-bit Transformer训练LLM
  • 蓝桥杯[OJ 2928]分糖果-CPP(贪心、字典序)
  • FreeRTOS教程2 任务管理
  • 加密 / MD5算法 /盐值
  • C语言——简易版扫雷
  • 解决达梦集成 JPA 时表和字段注释注解不生效的问题
  • 2.4_4 死锁的检测和解除
  • Python 导入Excel三维坐标数据 生成三维曲面地形图(体) 5-3、线条平滑曲面且可通过面观察柱体变化(三)
  • FPGA TestBench编写学习
  • 使用Vite构建Vue3+TypeScript项目
  • 深入了解网络流量清洗--使用免费的雷池社区版进行防护
  • 升级ChatGPT4.0失败的解决方案
  • 【亲测有效】解决三月八号ChatGPT 发消息无响应!
  • 【语法基础练习】1.变量、输入输出、表达式与顺序语句
  • MinGW-w64的下载与安装
  • 设计模式—桥接模式
  • 高波︱忆陈昊:在中年之前离去
  • 万科:存续债券均正常付息兑付
  • 挖掘机4月销量同比增17.6%,出口增幅创近两年新高
  • 人大新闻教育70年丨16759门课程里的时代密码
  • A股三大股指集体高开
  • 瑞士联邦主席凯勒-祖特尔、联邦副主席帕姆兰会见何立峰