首页 > 编程语言 >算法-背包问题

算法-背包问题

时间:2023-07-14 13:13:35浏览次数:37  
标签:背包 int max 问题 算法 kw kv dp

01背包问题
dp[i][j] = max(dp[i-1][j], dp[i-1][j-w[i]] + v[i]); (j>=w[i])

一维化(由于递推关系i只和i-1 有关,可进行空间压缩,遍历j时需要逆序遍历)
for(int i=0;i<=n;i++){
for(int j=target;j>=w[i];j--){
dp[j] = max(dp[j], dp[j-w[i]] + v[i]);
}
}

完全背包问题
商品不限量
dp[i][j] = max(dp[i-1][j], dp[i-1][j-w[i]] + v[i], dp[i-1][j-2w[i]] + 2v[i], ... dp[i-1][j-kw[i]] + kv[i]); (j>=kw[i])
由于
dp[i][j-w[i]] = max(dp[i-1][j-w[i[], dp[i-1][j-2
w[i]] + v[i], dp[i-1][j-3w[i]] + 2v[i], ... dp[i-1][j-(k+1)w[i]] + kv[i]);
dp[i][j] = max(dp[i-1][j], dp[i][j-w[i]] + v[i]);
一维化(由于递推关系i只和i-1 有关,可进行空间压缩,遍历j时可以正序遍历)
dp[j] = max(dp[j], dp[j-w[i]] + v[i]);

多重背包问题 (完全背包问题可以转换为多重背包问题k=j/w[i])
商品限量k[i]个
dp[i][j] = max(dp[i-1][j], dp[i-1][j-w[i]] + v[i], dp[i-1][j-2w[i]] + 2v[i], ... dp[i-1][j-kw[i]] + kv[i]); (k<k[i] && j>=kw[i])
for(int i=0;i<=n;i++){
for(int j=target;j>=w[i];j--){
for(int k=0;k <= k[i] && j >= k
w[i];k++){
dp[j] = max(dp[j], dp[j-kw[i]] + kv[i]);
}
}
}

标签:背包,int,max,问题,算法,kw,kv,dp
From: https://www.cnblogs.com/sanguoasd/p/16960267.html

相关文章

  • 算法——加减乘除计算器
    操作符号栈,数字栈遍历字符若是低优先级运算符(加、减),不断地弹出高优先级运算符(乘、除)栈顶运算符,直到栈为空或者栈顶不为高优先级运算符(乘、除)若是左括号运算符,加入操作栈,若是右括号运算符,不断地弹出栈顶运算符,直到栈顶为左括号若是数字,加入数字栈遍历完成后,若操作栈不为空,......
  • 算法——排列组合
    排列、组合适合回溯法,保存当前状态什么时候使用used数组,什么时候使用begin变量有些朋友可能会疑惑什么时候使用used数组,什么时候使用begin变量。这里为大家简单总结一下:排列问题,讲究顺序(即[2,2,3]与[2,3,2]视为不同列表时),需要记录哪些数字已经使用过,此时用**u......
  • 算法——前缀和 + 两数相加、相减
    求数组中,连续区间的大小,可使用前缀和相减得到。进阶变形若想得到区间大小等于target,暴力枚举前缀和相减。复杂度O(n^2)优化算法:将每次求得的前缀和放入hashMap中,S[j]-S[i]==target,(j>i)求出S[j]后,判断hashMap中是否存在S[i]=S[j]-target值,复杂度O(n)参考链接使数......
  • 算法——格雷编码、霍夫曼编码
    格雷编码当n=0时,格雷码序列为[0]。将n-1编码翻转,翻转部分的n-1位设置位1,获得n位编码。霍夫曼编码那么为什么通过哈夫曼编码后得到的二进制码不会有前缀的问题呢?这是因为在哈夫曼树中,每个字母对应的节点都是叶子节点,而他们对应的二进制码是由根节点到各自节点的路径所决定......
  • .NET6 微服务架构实战系列---记录Swaager在分层项目中实体层注释不显示的问题
    一、分层架构Swagger配置问题Dtos在Application类库中,Swagger按照正常配置,只会引用API层的XML文件这个时候我们打开Swagger是看不到实体层注释的二、分层项目Swagger配置2.1首先勾选生成API文档文件2.2然后在Program.cs文件中配置OK!重新生成下项目文件,再次启......
  • 保险行业数据安全合规与个人信息保护问题
    监管部门多次“重拳出击”,保险企业如何做好敏感数据保护工作?继《个人信息保护法》、《中华人民共和国消费者权益保护法》、《中国银保监会办公厅关于印发银行保险机构信息科技外包风险监管办法的通知》、《互联网保险业务监管办法》等相关法规之后,今年 3 月正式施行的《银行保险......
  • ACM算法竞赛入门和进阶指南
    文章目录如下,将从以下八个方面展开,接下来进入正文。一、ACM竞赛ACM程序设计竞赛是三人组队赛,一场比赛5个小时,通常有10~13个问题,三人合力解决,比赛时三人只能使用一台电脑。每年有多个赛站,但每人一年只能参加两场区域赛(不算邀请赛、省赛)。二、入门方式可以参考下方回答。AC......
  • Win10每次重启后桌面图标排列被打乱的问题?
    一般桌面图标都和我们常用的软件放在一起,这样我们需要的时候就可以马上开始使用。可以说桌面图标是windows系统中教具的代表特征,但是今天发现每次重启Win10后桌面图标自动重新排列? 1.打开操作,输入命令gpedit.msc,然后单击确定。 2.在本地策略组编辑器中打开用户配置/管理模......
  • 【FAQ】API6低代码开发问题汇总
    ​参考文档:低代码开发参考文档:https://developer.harmonyos.com/cn/docs/documentation/doc-guides/ide-low-code-0000001158284713基于景区模板开发元服务:https://developer.huawei.com/consumer/cn/doc/distribution/app/agc-lowcode-templateoverview-0000001548015654 ......
  • mklink命令要解决什么问题?用途是什么?
    `mklink`命令用于在Windows操作系统中创建符号链接或者硬链接。它的主要用途是解决以下问题:1.创建文件或文件夹的快捷方式:符号链接可以创建指向文件或者文件夹的快捷方式,使得在不改变原始文件或文件夹位置的情况下,可以在其他位置引用它们。这对于在不同目录中共享文件或者创建文......