![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
leetcode算法
caigen001
不成魔不成活
展开
-
背包九讲4——二维背包问题的理解(Java图解)
二维背包问题问题二维费用的背包问题是指:对于每件物品,具有两种不同的费用;选择这件物品必须同时付出这两种代价;对于每种代价都有一个可付出的最大值(背包容量)。问怎样选择物品可以得到最大的价值。设这两种代价分别为代价1和代价2,第i件物品所需的两种代价分别为a[i]和b[i]。两种代价可付出的最大值(两种背包容量)分别为V和U。物品的价值为w[i]。算法费用加了一维,只需状态也加一维即可。设f[i][v][u]表示前i件物品付出两种代价分别为v和u时可获得的最大价值。状态转移方程就是:f[原创 2020-06-12 17:21:12 · 2153 阅读 · 0 评论 -
背包九讲3——多重背包问题的理解(Java图解)
多重背包题目有N种物品和一个容量为V的背包。第i种物品最多有n[i]件可用,每件费用是c[i],价值是w[i]。求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大。基本算法这题目和完全背包问题很类似。基本的方程只需将完全背包问题的方程略微一改即可,因为对于第i种物品有n[i]+1种策略:取0件,取1件……取n[i]件。令f[i][v]表示前i种物品恰放入一个容量为v的背包的最大权值,则有状态转移方程:f[i][v]=max{f[i-1][v-k*c[i]]+k*w原创 2020-06-12 17:17:42 · 1551 阅读 · 2 评论 -
背包九讲2——完全背包问题的理解(Java图解)
题目有N种物品和一个容量为V的背包,每种物品都有无限件可用。第i种物品的费用是w[i],价值是v[i]。求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大。基本思路这个问题非常类似于01背包问题,所不同的是每种物品有无限件。也就是从每种物品的角度考虑,与它相关的策略已并非取或不取两种,而是有取0件、取1件、取2件……等很多种。如果仍然按照解01背包时的思路,令dp[i][j]表示前i种物品恰放入一个容量为v的背包的最大权值。仍然可以按照每种物品不同的策略写出状态转移方程,原创 2020-06-12 11:35:26 · 1748 阅读 · 0 评论 -
背包九讲1——01背包问题的理解(Java图解)
01背包问题题目有N件物品和一个容量为W的背包。第i件物品的体积是w[i],价值是v[i]。求解将哪些物品装入背包可使价值总和最大。基本思路特点是:每种物品仅有一件,可以选择放或不放。用子问题定义状态:即f[i][j]表示前i件物品恰放入一个容量为j的背包可以获得的最大价值。则其状态转移方程便是:01背包模板代码://N为物品数量//W为背包总体积//weights[]为每个物品的体积//values[]为每个物品的价值public int zero.原创 2020-06-11 23:17:02 · 1667 阅读 · 3 评论