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

代码随想录算法训练营第三十六天|完全背包理论基础、518. 零钱兑换 II、377. 组合总和 Ⅳ、70. 爬楼梯。

理论基础

完全背包(二维)

有N件物品和一个最多能背重量为W的背包。第i件物品的重量是weight[i],得到的价值是value[i] 。每件物品都有无限个(也就是可以放入背包多次),求解将哪些物品装入背包里物品价值总和最大。

完全背包和01背包问题唯一不同的地方就是,每种物品有无限件
52. 携带研究材料(第七期模拟笔试)

#include<bits/stdc++.h>usingnamespacestd;intmain(){intn,v;cin>>n>>v;vector<int>wi(n);vector<int>vi(n);for(inti=0;i<n;i++){cin>>wi[i]>>vi[i];}//在装上前i个物品里,在总重量为j要求下的最大价值vector<vector<int>>dp(n,vector<int>(v+1,0));for(intj=wi[0];j<=v;j++){dp[0][j]=dp[0][j-wi[0]]+vi[0];}for(inti=1;i<n;i++){for(intj=0;j<=v;j++){if(j<wi[i])dp[i][j]=dp[i-1][j];elsedp[i][j]=max(dp[i][j-wi[i]]+vi[i],dp[i-1][j]);}}cout<<dp[n-1][v];return0;}

完全背包(一维)

对于纯完全背包问题,其for循环的先后循环是可以颠倒的!
但如果题目稍稍有点变化,就会体现在遍历顺序上。(如求组合数和排列数)

#include<iostream>#include<vector>usingnamespacestd;intmain(){intN,bagWeight;cin>>N>>bagWeight;vector<int>weight(N,0);vector<int>value(N,0);for(inti=0;i<N;i++){intw;intv;cin>>w>>v;weight[i]=w;value[i]=v;}vector<int>dp(bagWeight+1,0);for(intj=0;j<=bagWeight;j++){// 遍历背包容量for(inti=0;i<weight.size();i++){// 遍历物品if(j-weight[i]>=0)dp[j]=max(dp[j],dp[j-weight[i]]+value[i]);}}cout<<dp[bagWeight]<<endl;return0;}

练习

518. 零钱兑换 II

518. 零钱兑换 II - 力扣(LeetCode)

classSolution{public:intchange(intamount,vector<int>&coins){//装满i的组合数vector<longlong>dp(amount+1,0);dp[0]=1;for(inti=0;i<coins.size();i++){for(intj=coins[i];j<=amount;j++){if(dp[j]<INT_MAX-dp[j-coins[i]]){//防止相加数据超过int,题目保证了最终结果 dp[amount] 是一个合法的 32 位整数。dp[j]+=dp[j-coins[i]];}}}returndp[amount];}};

377. 组合总和 Ⅳ(排列数)

377. 组合总和 Ⅳ - 力扣(LeetCode)

  • 注意是排列,不是只组合
classSolution{public:intcombinationSum4(vector<int>&nums,inttarget){//dp[i]: 凑成目标正整数为i的排列个数为dp[i]vector<int>dp(target+1,0);dp[0]=1;//求组合数// for(int i=0;i<nums.size();i++) {// for(int j=nums[i];j<=target;j++) {// if(dp[j]<=INT_MAX-dp[j-nums[i]]) {// dp[j]+=dp[j-nums[i]];// }// }// }for(inti=0;i<=target;i++){// 遍历背包for(intj=0;j<nums.size();j++){// 遍历物品if(i-nums[j]>=0&&dp[i]<=INT_MAX-dp[i-nums[j]]){dp[i]+=dp[i-nums[j]];}}}returndp[target];}};

70. 爬楼梯 (进阶)

57. 爬楼梯(第八期模拟笔试)

#include<bits/stdc++.h>usingnamespacestd;intmain(){intn,m;cin>>n>>m;vector<int>dp(n+1,0);dp[0]=1;for(inti=1;i<=n;i++){//楼梯for(intj=1;j<=m;j++){//步数if(i>=j)dp[i]+=dp[i-j];}}cout<<dp[n];return0;}
http://www.jsqmd.com/news/461766/

相关文章:

  • 探索并联型有源电力滤波器(APF)仿真模型:从原理到代码实践
  • 国密三级的中星微摄像头对接
  • 2026国内服务出色的膨胀型防火涂料品牌推荐与排行,电缆防火涂料/非膨胀型防火涂料,膨胀型防火涂料供应厂家电话 - 品牌推荐师
  • 闲置焕新正当时:2026年瑞祥全球购卡回收的五种简捷方法 - 猎卡回收公众号
  • 矽普半导体TOLL封装产品及市场应用
  • 免费用openclaw小白白嫖教程,一键安装小龙虾,无限token,再也不用担心用不起了
  • 基于PLC的多台设备最优启停控制:以水泵系统为例
  • 肇庆旧房翻新靠谱公司Top6:阿洲领衔,资质案例双硬核
  • 深入操作系统零拷贝技术
  • sharepoint search/query 返回 SearchRequest Invalid (Region is required when request with application p
  • 大模型与神经网络配置环境教程:Anaconda和CUDA安装与关联
  • WAVGATvcu控制器应用层软件策略大揭秘
  • Promptfoo:AI提示词测试与安全演练神器(以智普GLM为例)
  • 雷达检测人体呼吸心率时,呼吸谐波产生的本质是什么?
  • Qt开发与MySQL数据库教程(二)——MySQL常用命令以及示例
  • 解锁蛋白质的秘密:蛋白信息查询工具与使用指南
  • 2026年度商务礼品定制专业服务商排名前五深度测评
  • torch fbgemm.dll 损坏或缺失 问题
  • 2026年首推五个免费的pdf转换器 ,亲测稳定好用,第2个很多人都在用
  • 代码随想录算法训练营第五十天|99.岛屿数量、100.岛屿的最大面积
  • 回忆录优质品牌推荐:祖辈回忆录老照片修复/老华侨落叶归根回忆录与口述历史/老干部回忆录代笔与排版/重症家属生命回忆录抢救拍摄/选择指南 - 优质品牌商家
  • 【OpenClaw】史上最猛更新!AI记忆可自由插拔,开发者等了半年
  • Spring 的循环依赖
  • 探秘书匠策AI:解锁课程论文写作的“智慧钥匙”
  • 安装 OpenClaw
  • PbootCMS错误提示:执行SQL发生错误!错误:no such column: def1
  • 访问修饰符的基础面试题
  • 一款用在导弹上的自粘胶带:TJD-103(J)
  • canal和ES同步失败维护步骤
  • 基于Simulink的轮胎动力学模型(魔术公式)探索