首页 > 其他分享 >完全背包问题

完全背包问题

时间:2022-10-05 18:12:20浏览次数:69  
标签:背包 完全 内层 问题 零钱 循环 体积 dp

问题描述

完全背包问题

有\(N\)件物品和一个容量是\(V\)的背包,每件物品都有无限件可用。

第\(i\)种物品的体积是\(v_i\),价值是\(w_i\)。求解将哪些物品装入背包,可使这些物品总体积不超过背包容量,且总价值最大。

解题思路

内层嵌套循环

01背包问题每样物品只能使用一件,而针对完全背包问题,我们只需要在内层有关体积的循环中,再添加一层循环,枚举一共使用了多少件物品\(i\)即可。

for (int i = 1; i <= n; i++) {
    for (int j = m; j >= v[i]; j--) {
        for (k = 1; k * v[i] <= j; k++) {
            dp[j] = max(dp[j], dp[j - k * v[i] + k * w[i]);
        }
    }
}

更改遍历方向

01背包问题中,我们内层关于体积的循环,是从大到小的,这是为了保证在比较max(dp[j], dp[j - v[i]] + w[i])时,使用的是上一次i循环的数值;

而在完全背包问题中,内层关于体积的循环,修改成从小到大即可,此时dp = max(dp[j], dp[j - v[i]] + w[i])中,dp[j - v[i]] + w[i]使用的就是本次i循环中的数值,而i循环中,dp[j - v[i]] = max(dp[j - v[i]], dp[(j - v[i]) - v[i]] + w[i]),依次往前递推,总能找到那个最大值dp[j - k * v[i]] + k * w[i]

事实上,内层的体积循环中,遍历方向由大到小就是保证每个物品只使用一次由小到大则是可以使用无限次

for (int i = 1; i <= n; i++) {
    for (int j = v[i]; j <= m; j++) {
        dp[j] = max(dp[j], dp[j - v[i]] + w[i]);
    }
}

例题

标签:背包,完全,内层,问题,零钱,循环,体积,dp
From: https://www.cnblogs.com/zwyyy456/p/16756050.html

相关文章

  • 01背包问题
    问题描述01背包问题有\(N\)件物品和一个容量是\(V\)的背包,每件物品只能使用一次。第\(i\)件物品的体积是\(v_i\),价值是\(w_i\),求解将哪些物品装入背包,可使这些物品总体......
  • Oracle11g完全卸载的详细步骤(超管用)
    由于需要,这会儿需要卸载掉本机上的oracle11g数据库(我是在Windows7系统上装的),在网上搜的了挺多方法的,有些说的不清楚。下面小编给大家整理关于oracle11g卸载步骤,一起看看......
  • 记一次SpringBoot中跨域的小问题
    记一次SpringBoot中跨域的小问题问题前阵子,有个学长在跨域的时候遇到一个问题,我们两个人互相讨论了一番,得到了问题的答案。问题如下:如果按照上图的方式配置跨域类,那么......
  • 关闭sysMain服务解决win10系统硬盘占用率莫名增加到100%的卡顿问题
    最近电脑打游戏莫名会卡顿,甚至平常使用电脑都会感到卡顿感。打开任务管理器,看到硬盘占用率会突然涨到100%关闭superfetch服务后,卡顿问题得到解决。SysMain服务禁用方法:......
  • mysql 的小问题
    首先按下win+R执行services.msc进入服务,查找到MySQL,点击停止服务,然后在控制台cmd进入本地的MySQL文件夹,我的文件名是mysql-8.0.26-winx64,进入后执行命令scdeletemysql......
  • texlive编译中发现字体有问题解决
    这里可以用tlmgrinfo命令搜索需要下载的字体并从CTAN官网下载。一般这个时候也会有对应的路径,比如texmf-dist/fonts/。把下载的字体解压放在这些路径下,然后分别运行mktexl......
  • Closed-loop Matters: Dual Regression Networks for Single Image Super-Resolution
    第一遍:摘要:现有的SR方法有两个潜在的限制:首先,学习从LR到HR图像的映射函数通常是一个病态问题,因为存在无限个HR图像可以下采样到相同的LR图像;其次,配对的LR-HR数据在现实应......
  • 组态软件报警问题解决
    作为工业自动化领域的从业者,经常会使用各种组态软件,近期作者在使用业界鼎鼎大名的组态软件IFix过程中就遇到了一个小case,现在分享给大家。众所周知,IFix在运行过程中报警会......
  • 常见问题汇总 --- notepad++官网无法访问
     今天想更新下notepad++,打开发现相应超时。如上所示这时有三种可能,一种是被屏蔽了,一种跑路了、还有一种可能是换地址了。经过确认发现确实是被屏蔽了,我就纳闷了为什么......
  • 对话框完全显示后,马上执行一个按钮的事件
                                                                              何志丹 对......