(动态规划 完全背包 零钱兑换)leetcode 322

ops/2025/3/6 19:43:55/

本题为完全背包 与01背包的区别是 物品可以任意取 而01背包只能取一次

这就导致了状态转移方程的不同

1.当放不下:的时候 转移方程是一样的 取0到i-1 物品,背包容量为j的最优值

else

2.放得下:就是取    0到i-1 物品,背包容量为j的最优值和    “0到i的[j-w[i]]+v[i]"

                                                                                          (或者是本题中把v[i]改成加1)”

区别说得再简单一点就是01背包放第i件物品后+dp[i-1][j-w[i]] 

                                        完全背包则是放第i件物品后+dp[i][j-w[i]]

为什么一个取上一行,另一个取本行?

答:上一行是0-上一个物品的最优值,01背包取了就不能再取了

       本行是0-本物品的最优值,完全背包取了还可以再取

那完全背包光取本行物品了别的物品不混合放了?

答: 这里我们就当本物品的w[i]>j直接不取 就用dp[i-1][j],

所以我们的dpij是可能会加上w[i]>j 时的dp[i-1][j]

本题如何初始化

最左一列全部初始化为0 j-w[j]==0的时候硬币数为0

第一行取最大值 因为每个dpij都是要与dpi-1 j比小的

class Solution {
public:int coinChange(vector<int>& coins, int amount) {int n=coins.size();vector<vector<int>>dp(n+1,vector<int>(amount+1,amount+1));for(int i=0;i<=n;i++)dp[i][0]=0;for(int i=1;i<=n;i++){for(int j=1;j<=amount;j++){if(coins[i-1]>j){dp[i][j]=dp[i-1][j];}elsedp[i][j]=min(dp[i-1][j],dp[i][j-coins[i-1]]+1);}}if(    amount+1==  dp[n][amount])return -1;elsereturn dp[n][amount];}
};


http://www.ppmy.cn/ops/163679.html

相关文章

DeepSeek-R1本地部署保姆级教程

一、DeepSeek-R1本地部署配置要求 &#xff08;一&#xff09;轻量级模型 ▌DeepSeek-R1-1.5B 内存容量&#xff1a;≥8GB 显卡需求&#xff1a;支持CPU推理&#xff08;无需独立GPU&#xff09; 适用场景&#xff1a;本地环境验证测试/Ollama集成调试 &#xff08;二&a…

【含文档+PPT+源码】基于SpringBoot和Vue的编程学习系统

项目介绍 本课程演示的是一款 基于SpringBoot和Vue的编程学习系统&#xff0c;主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的 Java 学习者。 1.包含&#xff1a;项目源码、项目文档、数据库脚本、软件工具等所有资料 2.带你从零开始部署运行本套系统 3.该项…

蓝桥杯2025模拟三(01字符串)

【问题描述】 如果一个字符串中只包含字符 0 和字符 1&#xff0c;则称为一个 01 串&#xff08;包含全为 0 的串和全为 1 的串&#xff09;。 请问有多少个长度为 24 的 01 串&#xff0c;满足任意 5 个连续的位置中不超过 3 个位置的值为 1 。 【答案提交】 这是一道结果填空…

私有云基础架构

基础配置 使用 VMWare Workstation 创建三台 2 CPU、8G内存、100 GB硬盘 的虚拟机 主机 IP 安装服务 web01 192.168.184.110 Apache、PHP database 192.168.184.111 MariaDB web02 192.168.184.112 Apache、PHP 由于 openEuler 22.09 系统已经停止维护了&#xff…

【车规芯片】如何引导时钟树生长方向

12nm车规DFTAPR项目中&#xff0c;我们可以看到&#xff0c;绝大部分的sink都受控于xxxx_tessent_occ_clk_cpu_inst/tessent_persistent_cell_clock_out_mux/C10_ctmi_1这个mux&#xff0c;这是我们DFT设计结果&#xff1a; 这里我们重新打开place的数据 Anchor&#xff0c;也就…

BambuStudio学习笔记:Extruder 类

Extruder 类文档 概述 Extruder 类用于管理3D打印过程中的挤出机状态&#xff0c;包括挤出量计算、回抽操作、耗材统计等功能。支持多挤出机配置及共享挤出机模式。 头文件 #ifndef slic3r_Extruder_hpp_ #define slic3r_Extruder_hpp_ // ... #endif成员函数 构造函数 E…

在Ubuntu上搭建Samba服务,实现与windows之间的文件共享

1.安装samba 首先切换为root账户&#xff0c;就是带#符号的表示当前登录的是root超级用户&#xff1b; su - 如果忘记密码&#xff0c;就输入以下命令修改密码 sudo passwd root 再切换为超级用户 然后进行更新软件列表 sudo apt update sudo apt install samba安装 whe…

《2025软件测试工程师面试》功能测试篇

什么是功能测试? 功能测试是通过验证产品功能是否满足用户需求的过程,主要关注软件的功能是否符合需求规格说明,包括软件的各种功能、特性、性能、安全性和易用性等。 功能测试的流程包括哪些步骤? 需求分析:明确软件需求,确定测试范围。测试计划:制定详细的测试计划,…