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

代码随想录算法训练营第三十七天| 52. 携带研究材料 518.零钱兑换II 377. 组合总和 Ⅳ 70. 爬楼梯(进阶版)

@[TOC](代码随想录算法训练营第三十七天| 52. 携带研究材料 518.零钱兑换II 377. 组合总和 Ⅳ 70. 爬楼梯(进阶版) )

入营第三十七天
难度:难

  • 计划任务
  • 完成任务

52. 携带研究材料

动态规划五部曲:
1.确定dp数组以及下标含义 dp[i][j]表示从下标[0-i]的物品中选取,每个物品可以选无限次,放进容量为j的背包,价值总和最大
2.确定递推公式 dp[i][j]=Math.max(dp[i-1][j],dp[i][j-weight[i]+value[i])
3.递推数组初始化 第一列:容量为0时,所有物品都是0,第一行:容量大于等于第一件物品的重量时,dp[0][j]=dp[0][j-weight[0])+value[0]
4.确定遍历顺序 可以先物品再容量
5.举例推导递推公式

import java.util.Scanner;
public class Main{public static void main(String[] args){Scanner scanner = new Scanner(System.in);int n = scanner.nextInt();int v = scanner.nextInt();int[] weight=new int[n];int[] value =new int[n];for(int i=0;i<n;i++){weight[i]=scanner.nextInt();value[i]=scanner.nextInt();}int[][] dp = new int[n][v+1];for(int i=weight[0];i<=v;i++){dp[0][i]=dp[0][i-weight[0]]+value[0];}for(int i=1;i<n;i++){for(int j=0;j<=v;j++){if(j<weight[i]){dp[i][j]=dp[i-1][j];}else{dp[i][j]=Math.max(dp[i-1][j],dp[i][j-weight[i]]+value[i]);}}}System.out.print(dp[n-1][v]);}
}

518.零钱兑换II

动态规划五部曲:
1.确定dp数组以及下标含义 dp[i][j]表示使用下标为[0-i]的不同类别的硬币能够凑满面值等于j的情况总和
2.确定递推公式 dp[i][j]=dp[i-1][j]+dp[i][j-value[i]]
3.递推数组初始化 第一列为1,第一行当出现整除情况时设置为1
4.确定遍历顺序
5.举例推导递推公式

class Solution {public int change(int amount, int[] coins) {int[][] dp = new int[coins.length][amount+1];for(int i=0;i<coins.length;i++){dp[i][0]=1;}for(int i=coins[0];i<=amount;i++){dp[0][i] += dp[0][i-coins[0]];}for(int i=1;i<coins.length;i++){for(int j=1;j<=amount;j++){if(j<coins[i]){dp[i][j]=dp[i-1][j];}else{dp[i][j]=dp[i-1][j]+dp[i][j-coins[i]];}}}return dp[coins.length-1][amount];}
}

377. 组合总和 Ⅳ

动态规划五部曲:
1.确定dp数组以及下标含义
2.确定递推公式
3.递推数组初始化
4.确定遍历顺序
5.举例推导递推公式

class Solution {public int combinationSum4(int[] nums, int target) {//nums=>物品 target=>容量int[] dp = new int[target+1];dp[0]=1;for(int i=0;i<=target;i++){for(int j=0;j<nums.length;j++){if(i>=nums[j]){dp[i] = dp[i]+dp[i-nums[j]];}}}return dp[target];}
}

70. 爬楼梯(进阶版)

import java.util.Scanner;
public class Main{public static void main(String[] args){int m,n;Scanner scanner = new Scanner(System.in);while(scanner.hasNext()){n = scanner.nextInt();m = scanner.nextInt();int[] dp = new int[n+1];dp[0]=1;for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){if(i>=j){dp[i]+=dp[i-j];}}}System.out.print(dp[n]);}}
}
http://www.xdnf.cn/news/41.html

相关文章:

  • Dell戴尔服务器 PowerEdge R750xs + window server2012r2 || 2016
  • B端网站建设,怎样平衡功能与美观,满足企业多元需求?
  • 【Kubernetes基础--Service深入理解】--查阅笔记4
  • 通过gird布局实现div的响应式分布排列
  • 【Linux】第十章 配置和保护SSH
  • Android Mainline简介
  • Doris的向量化执行如何支撑分布式架构和复杂查询
  • ShenNiusModularity项目源码学习(18:ShenNius.Admin.Mvc项目分析-3)
  • AOSP的Doze模式-DeepIdle 初识
  • vue3 Ts axios 封装
  • 十二种存储器综合对比——《器件手册--存储器》
  • 23种设计模式-创建型模式之工厂方法模式(Java版本)
  • 科学护理进行性核上性麻痹,缓解病痛提升生活质量
  • 【Java学习笔记】键盘录入方法
  • GPU怎么绑定到服务器上
  • 20个常用的初级Java笔试题及其参考答案
  • 通义灵码 Rules 库合集来了,覆盖Java、TypeScript、Python、Go、JavaScript 等
  • Edge 浏览器推出 Copilot Vision:免费实时解析屏幕内容;Aqua Voice:极速 AI 语音输入工具丨日报
  • setTimeoutsetIntervalrequestAnimationFrame
  • FreeRTOS二值信号量详解与实战教程
  • 国内网络设备厂商名单(List of Domestic Network Equipment Manufacturers)
  • Python内置函数---all()
  • L2-033 简单计算器满分笔记
  • Vscode开发Vue项目NodeJs启动报错处理
  • 2025华中杯数学建模B题完整分析论文(共42页)(含模型、数据、可运行代码)
  • Linux环境基础开发工具使用
  • 「电商玩法」AI自动创作系统源码:商品图+视频+营销文案一键生成
  • 山东大学软件学院创新项目实训开发日志(17)之中医知识历史问答历史对话查看功能完善
  • [特殊字符] UnionFS(联合文件系统)原理解析:容器背后的存储技术
  • PclSharp ——pcl的c#nuget包