
背包问题
文章平均质量分 53
Werky_blog
这个作者很懒,什么都没留下…
展开
-
hdu 2546 饭卡(01背包)
题目地址:点击打开链接电子科大本部食堂的饭卡有一种很诡异的设计,即在购买之前判断余额。如果购买一个商品之前,卡上的剩余金额大于或等于5元,就一定可以购买成功(即使购买后卡上余额为负),否则无法购买(即使金额足够)。所以大家都希望尽量使卡上的余额最少。某天,食堂中有n种菜出售,每种菜可购买一次。已知每种菜的价格以及卡上的余额,问最少可使卡上的余额为多少。 In原创 2017-06-06 20:05:56 · 199 阅读 · 0 评论 -
L3-001 凑零钱 (01背包,并按要求输出背包内的东西)
题目:https://www.patest.cn/contests/gplt/L3-001加一个flg数组,j是记录的背包容量,i是记录其对应a[]数组下标这里肯定要先从大到小排一下的,这样最后加的就是1,否则就是9,保证了输出最小序列。#include<bits/stdc++.h>using namespace std;const int maxn=10004;int dp[...原创 2018-03-13 12:44:45 · 308 阅读 · 0 评论 -
poj 3624 01背包水题
题目:http://poj.org/problem?id=3624多写一点无聊的水题加一点题数,要不啥时候才能1000+呀#include<iostream>#include<cstdio>#include<cstring>#define maxn 1001using namespace std;int dp[15000];int main(){...原创 2018-03-19 21:00:52 · 276 阅读 · 0 评论 -
uva 624 CD(01背包 路径记录)
题目:https://cn.vjudge.net/problem/UVA-624就是把01背包的路径输出出来,没怎么看懂,但倒着往里放就行了。#include<iostream>#include<cstdio>#include<cstring>#define maxn 1001using namespace std;int dp[15000],a[1...原创 2018-03-19 22:17:55 · 183 阅读 · 0 评论 -
蓝桥杯 PREV-36 包子凑数(完全背包+gcd定理)
题目:思路:又学了一个定理:如果所有数的最大公约数不为1,则他们无法组成的数有无穷个;反之,则有有限个。然后完全背包,把背包容量写大点就行。别chai,一完全背包就方案数,这么大容易超int,赋为1就行了。#include<bits/stdc++.h>#define ll long long intusing namespace std;const int N=100010; ...原创 2018-03-29 17:31:04 · 300 阅读 · 0 评论 -
wannafly 12 A 完全背包
题目:点击打开链接一道简单的完全背包,本想考完试来签个到的,结果遇到了问题。直接看代码:#include<bits/stdc++.h>#define ll long long intusing namespace std;const int inf=0x7fffffff;double dp[25],r[6];int main(){ int n; cin>...原创 2018-03-24 15:19:48 · 149 阅读 · 0 评论 -
hdu Bone Collector II(01背包第K优解)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=2639题意:和01背包题意一样,只不过给了K,求第K优解。在01背包的基础上,dp[i][j]]加了一维,变成dp[i][j][k],表示前i个物品容量为j时的第K大解。加一层循环即可,然后把可能的解(前一状态,和放入该物品的状态)都分别存到a[],b[]数组中。注意并列解是不是同一解。#include&l...原创 2018-03-20 20:48:17 · 164 阅读 · 0 评论 -
wannafly 12 C (dp/01背包)
题目:点击打开链接又是一道dp,可以看成是容量为m的背包,最多放多少字符串。写法就和01背包类似了。无需填满,初始化为负无穷。dp1[i][j]:放入的第i个字符是a时,变化为j时的最大字符串数。dp2同理状态转移:dp1[j]可以由dp1[j]+1得到,也可以由dp2[j-1]+1变化得到,所以每次发生变化另一个dp都会加一。#include<bits/stdc++.h>#defi...原创 2018-03-24 21:34:28 · 177 阅读 · 0 评论 -
hdu 1864 最大报销额度(浮点数01背包)
题目:点击打开链接思路:有选择的加入背包,然后都乘100变成整形做01背包。setprecision(2)是保留两位有效数字 前面加cout<<setiosflags(ios::fixed)保留2位小数。#include<bits/stdc++.h>#define ll long long intusing namespace std;const int inf=0x...原创 2018-03-25 11:26:32 · 230 阅读 · 0 评论 -
hdu 2955 Robberies (01背包好题)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=2955题意:给一个最大被抓概率P,和n个银行,给出每个银行的钱和被抓概率。首先这是相互独立事件,我竟然将概率加起来了。。。显然一贯的思维,将概率作为质量,钱看做价值是无法做的。需要换种思路,将钱看做质量,希望被抓概率最小也就是逃跑概率最大,将逃跑概率看做价值即可。然后得到每种可能的最大逃跑概率,大于1-P即...原创 2018-03-25 23:22:29 · 183 阅读 · 0 评论 -
hdu 3466 Proud Merchants (01背包好题)
题目:点击打开链接题意:普通的01背包,多了一个q,现在剩余钱数大于q是才能买这个。p,v分别为花费和价值。思路:这也比较难想,其实放两个物品,需要的空间不只是p1+p2,如果先放1,需要q1+p2,先放2,需要p1+q2。所以要先对这个排下序。(这个排序很智能啊,这怎么实现的,我这么写也能排好)#include<bits/stdc++.h>using namespace std;...原创 2018-03-25 23:47:20 · 153 阅读 · 0 评论 -
hdu 2126 Buy the souvenirs (二维01背包)
题目:点击打开链接题意:普通的01背包,有m元钱,最多有几种买的可能,按最大种类数买。比如10元最多买4件物品,购买方式只有一种。7元最多买3件,有2种购买方式。思路:和2159二维完全背包类似,多了一个件数的隐含条件,需要加一维。dp[j][k]表示花 j 元,恰好买k件物品是可行的,边界dp[0][0]=1,进行状态转移,可行就赋为1了,最后相同的k加起来即可。k一定要倒着写,要知道二维的意义...原创 2018-03-26 12:49:11 · 145 阅读 · 0 评论 -
UVa 147 Dollars (浮点数完全背包)
题目:点击打开链接题意:有这些面值,给一个钱数求能够凑出的方案数。思路:完全背包,求方案数,dp[0]=1。物品质量不变时可以先求出dp,直接输入输出。注意精度问题,浮点数变整型时随便加个数让他加上去就行。#include<bits/stdc++.h>#define ll long long intusing namespace std;const int inf=0x3f3f3...原创 2018-03-26 16:38:14 · 644 阅读 · 0 评论 -
poj 1837 Balance (貌似二维背包,带负数)
题目:点击打开链接题意:放砝码,给出位置,和砝码质量,求组合使天平平衡的方案数。看图,我的思路:相当于砝码质量只留1kg,其他分到臂杆长度上去了。然后发现不可行,最右边点不好数,学习他人的方法,把dp[0][7500]设为1,向左或向右出去再回来,dp[0][7500]就能++。也并不算二维背包,就是两层循环找乘积,放到最内层循环在0到15000上记录上。因为加的是砝码,所以质量在最外层。#inc...原创 2018-03-26 19:39:34 · 345 阅读 · 0 评论 -
poj 1787 Charlie's Change(多重背包路径记录)
题目:点击打开链接题意:给出了一杯咖啡多少钱,和1块,5块,10块,25块各有多少,要正好买这杯咖啡,并且花的硬币越多越好。思路:简单的多重背包,类似poj2392,不用二进制优化,恰好买这杯咖啡,初始化为负无穷。第二个条件更简单,从小面值的开始放就行。记录路径又不会了,用path数组记录他的前一个值,每次用时用n-path[n]得到的差值就是放入的面值。但。。。。这些都不要紧,为什么dp[j]要...原创 2018-03-27 18:19:49 · 230 阅读 · 0 评论 -
洛谷 P1336 最佳课程选择(分组背包)
题目:https://www.luogu.org/problemnew/show/P1336思路:转化为分组背包就简单了,和hdu 1712一模一样的。跟选课一样,把每种课题的情况全列出来,即写1到n篇用的时间。每组只能选一个。初始化为0x3f但是洛谷竟然不能用fill(),让我错了好半天竟然错在这。。#include<bits/stdc++.h>#define ll long lo...原创 2018-03-18 19:34:28 · 583 阅读 · 0 评论 -
hdu 3449 Consumers(有依赖的背包)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=3449题意:买东西,想买后头的先把最前面的篮子买了。思路:有依赖的背包,都能用01背包做。#include<bits/stdc++.h>using namespace std;const int inf=0x7fffffff;int dp[51][100005],w[11],v[11];...原创 2018-03-17 21:45:06 · 212 阅读 · 0 评论 -
金明的预算方案 (有依赖的背包/树形dp)
题目:https://vijos.org/p/1313思路:这种依赖把附件接到主件上,用01背包即可。#include<bits/stdc++.h>using namespace std;const int inf=0x7ffffff;int dp[160005];vector<int > a[65],b[65];struct node{ int v,p...原创 2018-03-17 20:14:16 · 671 阅读 · 0 评论 -
hdu 1203 I need a offer(经典01背包)
点击打开链接#includedouble dp(int a[],double b[],int n,int m){ int i,j; double f[10001]={0.0};//背包的费用是作为下标来记录的 for(i=0;i<m;i++) for(j=n;j>=a[i];j--) if(f[j]<1-(1-f[j-a[i]])*(1-b[i]))原创 2017-06-08 12:59:31 · 172 阅读 · 0 评论 -
poj 2392 Space Elevator(多重背包)
题目:http://poj.org/problem?id=2392题意:高度,限制高度,数量。 求能垒出的最大高度,有每种石头的高度限制和数量限制。思路:多重背包:一种可以在01背包基础上加一个数量的for循环。另一种可以当做另一种限制条件放在if里,但只有高度和价值用同一值表示才能用。这里重量和价值都是高度,在数量和高度限制下越高越好。这里显然要对限制高度排下序的。原创 2018-01-30 12:45:14 · 236 阅读 · 0 评论 -
hdu 1059 Dividing (多重背包详解)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=1059题意:质量为i的东西有a[i]个,分两拨问能不能质量相等,质量和为奇显然不能,偶数时只要达到sum/2的背包就行了,剩下的自然组成了另外sum/2的背包。多重背包:#include #include #include #include using namespace std;原创 2018-01-31 14:19:38 · 1611 阅读 · 0 评论 -
hdu 2191 多重背包(毫无变化)
题目:点击打开链接#include #include #include #include #include using namespace std;const int maxn=4000005;int dp[maxn],w[1005],v[1005];int main(){ int t,n,m,p,h,cc; cin>>t; while(t--){原创 2018-01-31 16:13:03 · 129 阅读 · 0 评论 -
hdu 2602 bone collector(最裸01背包)
题目地址:点击打开链接题意:a为价值,b为体积,求容量为V的背包最多可以装多少骨头。#includeint dp(int a[],int b[],int N,int V){ int i,j,f[1001]={0}; for(i=0;i<N;i++){ for(j=V;j>=b[i];j--){//j-- if(f[j]<f[j-b[i]]+a[i]原创 2017-06-08 21:33:35 · 171 阅读 · 0 评论 -
hdu 3535 Areyoubusy (混合背包)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=3535题意:有n个组的工作,有t的时间去做对于组有三种类型0至少选一个1最多选一个2随意,拿或者不拿,选其中多少都可以每组每件事有花费的时间和收益取尽量高的收益思路:三种情况:0:至少选一个:dp[i][k]原创 2018-02-02 15:33:10 · 233 阅读 · 0 评论 -
hdu 2844 coins (多重背包)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=2844垃圾题,写这么长时间#include#include#include#includeusing namespace std;const int maxn=100005;bool dp[maxn];int w[105],num[105],nw[10010];int main(原创 2018-02-02 22:28:05 · 161 阅读 · 0 评论 -
Vijos 1104 采药 (整理:01背包详解)
题目:https://vijos.org/p/1104描述辰辰是个天资聪颖的孩子,他的梦想是成为世界上最伟大的医师。为此,他想拜附近最有威望的医师为师。医师为了判断他的资质,给他出了一个难题。医师把他带到一个到处都是草药的山洞里对他说:“孩子,这个山洞里有一些不同的草药,采每一株都需要一些时间,每一株也有它自身的价值。我会给你一段时间,在这段时间里,你可以采到一些草药。如果原创 2018-01-28 00:00:56 · 210 阅读 · 0 评论 -
vijos 1133 装箱问题(简单01背包)
题目:https://vijos.org/p/1133#include #include #include #include #include using namespace std;int w[200],f[35][20005];int main() { int t,m; cin>>t>>m; for(int i=1;i<=m;i++)原创 2018-01-28 00:39:08 · 272 阅读 · 0 评论 -
Ural 1005 数字分组问题(01背包)
题目:https://cn.vjudge.net/problem/URAL-1005题意:数字分两组,使得到的两组和差值最小。思路:dp把能得到的和的所有情况都求出来,算差值最小即可。这种dp就能求所有和的情况:01背包:倒着写,因为只有一个,前面都是没放这个物品的状态,倒着改过去,不会影响前面。完全背包:正着写,由前一状态加该物品价值得到不超过i千克的最大价值。原创 2018-01-29 22:13:54 · 478 阅读 · 0 评论 -
hdu 1963 investment(完全背包)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=1963题意:给了初始资金和年数,接下来是买每种债券的前和年收益,求n年后最大收益。思路:背包问题就是套。花费是重量,利息是价值,能买无穷多个,不超过初始资金(容量)。用完全背包。val是初始资金,再加上每年的收益作为下一年的本金。#includeusing namespace原创 2018-01-29 23:58:31 · 269 阅读 · 0 评论 -
Ural 1017 楼梯问题/整数拆分(01背包/dp/母函数)
题目:https://cn.vjudge.net/problem/URAL-1017大意:建楼梯,每层逐渐减小,至少两层,相当于整数拆分,不能有相等的,求种类数。1.01背包:取上为1,没取为0,取到n的最大种类数。#include <cstdio>#include <cstring>#include <iostream>#include <algo...原创 2018-02-15 18:33:26 · 376 阅读 · 0 评论 -
hdu 2159 FATE (二维费用背包问题)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=2159怪物有无限个,将完全背包加一维,除了忍耐度(容量)限制,还有总数限制物品总个数的限制有时,“二维费用”的条件是以这样一种隐含的方式给出的:最多只能取M件物品。这事实上相当于每件物品多了一种“件数”的费用,每个物品的件数费用均为1,可以付出的最大件数费用为M。换句话说,设f[v][m]表示付出费用v、最...原创 2018-03-16 22:53:12 · 900 阅读 · 0 评论 -
hdu 1712 ACboy needs your help(分组背包)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=1712大意:n节课,m天,后面第i节课上j天获得的好处。背包九讲写道:for 所有的组k for v=V..0 for 所有的i属于组k f[v]=max{f[v],f[v-c[i]]+w[i]}注意这里的三层循环的顺序,甚至在本文的beta版中我自己都写错了。“f...原创 2018-03-17 16:19:16 · 173 阅读 · 0 评论 -
长安大学第三届ACM-ICPC程序设计竞赛 H(01背包)
题目:点击打开链接#include<bits/stdc++.h>using namespace std;const int maxn=1e5+10;const int inf=0x3f3f3f3f;int a[maxn],b[maxn],dp[maxn],tmp[maxn];int main(){ int t,n,m; cin>>t; ...原创 2018-04-17 21:20:05 · 206 阅读 · 0 评论