![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
背包
文章平均质量分 85
chen_minghui
这个作者很懒,什么都没留下…
展开
-
hdu 1203 I NEED A OFFER! 变形01背包
经典01背包的变形#include#include#includeusing namespace std;const int N = 10001;double dp[N]; int n,v;int w[N];double c[N];void pack(){ //memset(dp,0,sizeof(dp));//double类型只能用这个清零 fill(dp,dp+N,原创 2016-10-21 22:55:35 · 242 阅读 · 0 评论 -
uva624 CD 01背包+输出路径
题意:将CD中的歌曲复制到胶卷中,胶卷最多容纳N分钟,给出CD中歌曲的数量和每一首歌的持续时间体积和价值贡献一样大的01背包路径输出:在选择第I件物品是从前I-1个物品这个子问题推出来的,如果f[I][j]>f[I-1][j]说明是选择了第I件物品,用一个数字path[I]记录#include#includeusing namespace std;int f[21][2100];原创 2016-10-17 23:04:30 · 395 阅读 · 0 评论 -
hdu 1248 寒冰王座 完全背包
题目:http://acm.hdu.edu.cn/showproblem.php?pid=1248思路:完全背包模板#include#include#includeusing namespace std;const int maxn=10010;int dp[maxn];int main(){ int a[3],t; a[0]=150;a[1]=200;a[2]=350;原创 2017-07-11 09:11:45 · 263 阅读 · 0 评论 -
hdu 1963 Investment 完全背包
题意:某人有一些钱,可以用钱去银行购买债券,用来获得利息。给定购买的年数,每年可以更换购买的债券类型。给定一些债券的价格(是1000的整数倍)和可以获得的利息。年数到时可以获得的钱数的最大值。思路:价值总是1000的倍数,就可以用1个单位代表1000.数组就可以开得下了。#include#include#includeusing namespace std;const int ma原创 2017-07-11 10:15:14 · 228 阅读 · 0 评论 -
hdu 2159 FATE 二维完全背包
思路:不能用经验作背包,因为获得的经验可以超过升级的经验。有两个限制条件1.杀怪的总数量。2.拥有的疲劳值。#include#include#includeusing namespace std;int dp[110][110];//数量 疲劳值 最大经验 int a[110],b[110];// 获得的经验 减去的疲劳值 int main(){ int n,m,k,s;原创 2017-07-11 15:39:23 · 218 阅读 · 0 评论 -
CodeForces 106C Buns 多重背包
题意:有n克生面粉,m种馅。每种馅含有ai,克,每一种馅可以拿出bi克馅与ci克面粉制成一种面包,获得di的价值。生面粉可以拿出c0克制成馒头,获得d0价格。给定n,m,c0,d0.和馅的信息。问可以得到的最大价值思路:直接套多重背包模型。#include#include#includeusing namespace std;const int maxn = 20;int dp[原创 2017-07-13 18:23:08 · 296 阅读 · 0 评论 -
51nod 1007 正整数分组 01背包
题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1007 思路:先求出总和,然后用总和的一半作背包体积,看全部数能够装多少。然后拿总和减去已装的,得到另一半有多少。#include<cstdio>#include<queue>#include<iostream>#include<vector>#incl原创 2017-08-07 22:49:28 · 237 阅读 · 0 评论 -
HDU 3339 In Action 最短路+01背包
题目链接http://acm.hdu.edu.cn/showproblem.php?pid=3339题意从基地(0点)开出数量足够多的坦克去摧毁发电站,每个发电站有个能量值,要求摧毁的发电站的能量总和要超过所有发电站能量值总和的一半,最所有坦克运行的最短路径。思路又是看错题意,要求能量值超过一半(╥╯^╰╥)。求出0点到每个点的最短路,然后以所有发电站能量值总和为背包容量,到每个点的最短距为价值,每原创 2017-09-06 22:06:20 · 165 阅读 · 0 评论 -
HDU 1712 ACboy needs your help 分组背包模板
题目链接http://acm.hdu.edu.cn/showproblem.php?pid=1712题意有n门课,每门课所能获得的价值与在这门课上所花时间有关。用val[i][j] 表示在i课花费j天时间能获得的价值。给m天求最大价值。思路n门课,每门课都有m种选法,且只能选一种。分组背包模板。。#include<cstdio>#include<iostream>#include<algorit原创 2017-10-28 15:39:56 · 236 阅读 · 0 评论 -
POJ3624 Charm Bracelet 01背包模板(一维)
简单得01背包问题,题目得数据量大,二维数组表示爆内存#includeusing namespace std;const int V=12881;const int N=3403;int w[N]={0},c[N]={0};int f[V];void pack(int n,int m){ for(int i=1;i<=n;i++) for(int v=V;v>=0;v--)原创 2016-10-09 18:48:05 · 323 阅读 · 0 评论 -
Codeforces 189A. Cut Ribbon 完全背包
题意:一块长度为n的布条,要求每次切断都必须要含有a,b,c三个长度的两种,问最多可以切多少块用一维数组表示状态,表示体积的初始条件为第i个物品,除了f[0]用0初始化外,其余的均用无穷小初始化,表示处于未定义的状态代码不是很理解。#include#includeusing namespace std;int main(){ int n; int f[4001]; f[0原创 2016-10-19 19:22:30 · 313 阅读 · 0 评论 -
hdu 1114 Piggy-Bank(完全背包) dag边权之和最小
.完全背包装满,背包价值最小问题。,除了dp[0]=0,其余均初始化为无穷大完全.完全背包装满,背包价值最小问题,除了dp[0] = 0,其余均初始化为无穷大小,这题属于第一类题意:程序首先有一个测试次数,然后储钱罐的初始质量和装满钱币的质量,之后输入的是钱币的种类,接下是每种钱币的价值和质量,求将储钱罐装到输入的质量,获得的价值最小为多少,如果不能装满(不符题意),输出This is i原创 2016-10-31 22:33:26 · 316 阅读 · 0 评论 -
通过金矿模型介绍动态规划
看了很受启发,感谢原作者,原文:http://www.cnblogs.com/sdjl/articles/1274312.html----第一节----初识动态规划-------- 经典的01背包问题是这样的: 有一个包和n个物品,包的容量为m,每个物品都有各自的体积和价值,问当从这n个物品中选择多个物品放在包里而物品体积总数不超过包的容量m时,能转载 2016-11-03 19:35:27 · 416 阅读 · 0 评论 -
POJ 1276 Cash Machine
多重背包:每个物品有数量限制,并且有一个容量cash,从中选取物品组合,输出不能超过cash的最大值原文:http://blog.csdn.net/domacles0124/article/details/11395187#include#includeusing namespace std;int num[1001],w[1001];int dp[100001];int con原创 2016-12-04 21:11:59 · 199 阅读 · 0 评论 -
多重背包 hdu2191 悼念512汶川大地震遇难同胞――珍惜现在,感恩生活
题意:没见物品消耗空间c[I],贡献w[I],数量num[I],求最大值#include#includeusing namespace std;const int N =2000;int dp[2001],n,m;int c[101],w[101],num[101];int Max(int a,int b){ return a>b?a:b;}void pack(){原创 2016-10-22 18:05:13 · 390 阅读 · 0 评论 -
hdu2955 Robberies
题意:某人想去抢银行,他评估了n个银行:有多少钱,和抢劫被抓的概率。给定一个不安全的概率p,抢劫时的被抓概率不能超过p,要求求出最多能抢劫的钱数。一开始我也以为概率只有两位小数,将它们放大100倍,用概率作重量,钱作为价值。后来错了,看了别人的题解才知道,将银行的钱看作重量,安全概率作为价值。#include#define Max(a,b) ((a)>(b)?(a):(b))using n原创 2016-11-12 14:17:15 · 247 阅读 · 0 评论 -
算法导论:动态规划 切钢条问题
问题描述:不同长度的钢条,具有不同的价值,而切割工序没有成本支出,公司管理层希望知道最佳切割方案,假定钢条的长度均为整数:用数组v[I]表示钢条长度为I所具有的价值v[] = {0,1,5,8,9,10,17,17,20,24,30};用r[I]表示长度为I的钢条能获取的最大价值,通过观察可以知道,r[1] = 1(无切割),r[2] = 2(无切割),r[3] = 3(无切割),r[4] = 1原创 2016-11-05 11:18:59 · 2760 阅读 · 1 评论 -
hdu 2602 Bone Collector 01背包
基本的01背包:但有个地方特坑爹,骨头可以体积为0,价值不为零,用二维数组写,仅仅差了一个数字,交了几次都WA,一维和二维差别很小。1,体积循环二维背包从零到n,一维从n到0。2.二维中的dp[I][j]相当于一维的dp[j],d[I-1][j-w[I]]相当于d[j-w[I]]二维:#include#includeusing namespace std;const int原创 2016-10-20 21:12:48 · 220 阅读 · 0 评论 -
hdu 1864 最大报销额
题意:拿发票去报销,发票能够报销的条件是只能含有ABC三类物品,并且一类物品的价格总和不超过600,一张发票的三类物品价格总和不超1000,选出一些发票使其能够报销最多。思路:01背包,但是体积不是int,由于总是保留两位小数,将体积扩大100倍,当作int处理#include#include#include#includeusing namespace std;int w[40原创 2017-06-16 21:04:33 · 224 阅读 · 0 评论 -
hdu 3496 Watch The Movie 二维01背包
题意:有n个电影光盘,每张光盘看完需要一些花时间并且能获得一些happy值。很奇怪但是商家只愿意出售m张。并且观看得总时间有限。求能够把m张看完,并且获得最大的happy值。如果不能看完m张光盘,那就输出0。思路:普通的01背包变形,这里有两个限制条件。一是背包体积有限,二是从n中挑选m个满足条件的。#include#include#includeusing namespace st原创 2017-07-10 21:44:19 · 282 阅读 · 0 评论 -
POJ 1155 TELE 树形dp + 背包
题目链接http://poj.org/problem?id=1155题意一个信号传输网络是树形的。m个潜在用户,n-m个信号发射站。其中1号是电视台信号发电站。每个发射站之间连通需要一定的花费。用户都处在叶子节点处。且每个用户都会给定量的前补偿电视台。在使电视台不亏本的情况下,最多可以使多少用户连同。思路树形dp+分组背包 用dp[u][j] 表示在u的子树中连同j个用户所能获得的最大价值 如果原创 2017-10-28 15:50:01 · 225 阅读 · 0 评论