背包
yyf525
这个作者很懒,什么都没留下…
展开
-
背包——整合
一:前言 既然背包类型的问题都讲完了,那么自然少不了整合。 二:代码链接 1:01背包 01背包二维和一维_yyf525的博客-CSDN博客 2:完全背包 完全背包问题二维和优化_yyf525的博客-CSDN博客_二维完全背包问题 3:多重背包 多重背包即优化_yyf525的博客-CSDN博客 4:分组背包 ...原创 2021-11-04 10:06:57 · 130 阅读 · 0 评论 -
分组背包和优化
分组背包其实就是有N组物品,每组物品中只能选一个。代码(非优化)也是很简单的。 题目大概是这样子的 有 N 组物品和一个容量是 V 的背包。 每组物品有若干个,同一组内的物品最多只能选一个。 每件物品的体积是 vij,价值是 wij,其中 i 是组号,j 是组内编号。 求解将哪些物品装入背包,可使物品总体积不超过背包容量,且总价值最大。 输出最大价值。 #include <bits/stdc++.h> using namespace std; const int N=201; int f原创 2021-11-03 17:10:38 · 468 阅读 · 0 评论 -
多重背包即优化
多重背包和完全背包的唯一区别就是多重的每个物品有数量,而完全是每个物品无限取。 所以最朴素的算法很容易就写出来了 #include <bits/stdc++.h> using namespace std; const int N=1890; int v[N],s[N],w[N],n,m,f[N][N]; int main(){ cin>>n>>m; for(int i=1;i<=n;i++) cin>>v[i]>>w[i]>原创 2021-10-23 06:59:48 · 63 阅读 · 0 评论 -
完全背包问题二维和优化
遇到这种问题,如果理解了01背包的话,其实很简单,只要把每次取的情况分清楚就好了: 1:不取 直接等于上一个就好了f[i][j]=f[i-1][j]; 2:取 其实想清楚也很简单 有i个物品重量为j-v[i]的最优解时加上这个物品的价值f[i][j]=f[i][j-v[i]+w[i] 当然是j>=v[i]的时候 代码: #include <bits/stdc++.h> using namespace std; const int N=1890; int v[N],w[N],n,原创 2021-10-08 19:09:35 · 195 阅读 · 0 评论 -
01背包二维和一维
直接上代码: #include <bits/stdc++.h> using namespace std; const int N=9000; int n,m; int v[N],w[N]; int f[N][N]; int main(){ cin>>n>>m; for(int i=1;i<=n;i++) cin>>v[i]>>w[i]; for(int i=1;i<=n;i++){ for(int j=1;j<.原创 2021-10-08 18:54:56 · 110 阅读 · 0 评论