背包问题
背包dp
Haskei
这个作者很懒,什么都没留下…
展开
-
HDU 3810 Magina (优先队列+DFS 实现01背包)
Magina 题目链接:HDU 3810 Magina 某些怪物是联通的,Magina每次只能选择一个堆进行打怪,也就是分组的01背包,最后如果有解的话,肯定是在打某个堆的某些怪物。因为这个题的时间最大为10亿,我们不能开一个10亿大小的数组。所以用优先队列解决01背包问题,同时进行减枝。 怎么用优先队列解决01背包,思想可以看如下链接: 优先队列式分支限界法 AC代码: #include<cstdio> #include<cstring> #include<a.原创 2020-07-24 09:30:02 · 352 阅读 · 0 评论 -
HDU 2639 - Bone Collector II (第K优解)
Bone Collector II 题目链接:HDU 2639 Bone Collector II 本题要求的是第K优解,我们在01背包中,每次求得的是当前下的最优解,也就是说max()每次都取了最好的那个解,这里要求的是第K优解,我们改变一下max这里的求解过程,改为求K个解,从最优解一直到第K优解。用a[l]表示在背包容量为l的情况下,当前物品i(前i件物品)不放进背包,背包的价值。用b[l]表示在背包容量为l的情况下,当前物品i(前i件物品)放进背包,背包的价值。在当前物品的情况下,总共有2.原创 2020-07-22 11:07:58 · 208 阅读 · 0 评论 -
HDU 3449 Consumer 有依赖的背包
Consumer 题目链接:HDU 3449 Consumer #include<cstdio> #include<cstring> #include<algorithm> #include<vector> #define INF 0x3f3f3f3f #define N 100001 using namespace std; int main() { int n, m; vector<int> box[50];原创 2020-07-21 11:53:56 · 132 阅读 · 0 评论 -
洛谷P1064 金明的预算方案 (有依赖的背包)
传送门 用分组背包策略解决 不知道为什么下面自己写的代码全部数据都过不了。。。。 #include<cstdio> #include<cstring> #include<algorithm> #include<vector> #define INF 0x3f3f3f3f #define N 61 using namespace std; int main() { int n, m; int w[N][3]={0}; int原创 2020-07-20 13:19:09 · 174 阅读 · 1 评论 -
HDU 1712 ACboy needs your help (分组背包)
传送门 这里为什么会想到使用分组背包,是因为每个课程有m种选择方式,也就是学1天到学m天,但是这些方式只能选择一种,这里也就明确了分组是以课程种类为分组的。背包的容量为什么选择m而不是n呢?是因为我们学m天肯定能找到获益最大的结果,但是每一门课都上不一定能获得最大收益,也就是说dp[m] > dp[n]。背包问题很重要的一点就是背包的容量选择,也即是背包所代表的意义,dp[m]是花费m天能获得的最大收益,dp[n]是上完n门课所能获得的最大收益。 #include<iostream&.原创 2020-07-19 14:17:22 · 157 阅读 · 0 评论 -
luogu 1757 分组背包
题目背景 直达通天路·小 A 历险记第二篇 题目描述 自0101背包问世之后,小 A 对此深感兴趣。一天,小 A 去远游,却发现他的背包不同于0101背包,他的物品大致可分为kk组,每组中的物品相互冲突,现在,他想知道最大的利用价值是多少。 输入格式 两个数m,nm,n,表示一共有nn件物品,总重量为mm。 接下来nn行,每行33个数ai,bi,ciai,bi,ci,表示物品的重量,利用价值,所属组数。 输出格式 一个数,最大的利用价值。 输入输出样例 ...原创 2020-07-19 11:23:06 · 159 阅读 · 0 评论 -
HUD 2150 FATE 二维费用背包
传送门 dp[j][k]为打j个怪兽,消耗k忍耐度获得的最大经验 #include<iostream> #include<cstdio> #include<algorithm> #include<cstring> #define INF 0x3f3f3f3f #define NUM 50 using namespace std; int main() { int n, m, k, s; int exp[100], health[100原创 2020-07-18 15:24:26 · 114 阅读 · 0 评论 -
背包问题
推荐博客https://blog.csdn.net/yandaoqiusheng/article/details/84782655原创 2020-07-18 15:15:19 · 162 阅读 · 0 评论 -
hdu 3535 AreYouBusy (多重背包)
AreYouBusy (传送门) Time Limit: 2000/1000 MS (Java/Others)Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 6141Accepted Submission(s): 2456 Problem Description Happy New Term! As having become a junior, xiaoA recognizes that there i...原创 2020-07-18 10:20:15 · 179 阅读 · 0 评论 -
01 背包的初始化问题
当要求背包必须装满时,求背包能获得的最大价值 int n=10; int v[3] = {4,5,6}; int p[3] = {10, 17, 16}; int dp[11]; for(int i=1; i<=n; i++) dp[i] = -INF; dp[0] = 0; for(int i=0; i<3; i++) { for(int j=n; j>=v[i]; j--) {原创 2020-07-18 15:08:21 · 331 阅读 · 0 评论