![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
背包问题
文章平均质量分 52
傻笨
这个作者很懒,什么都没留下…
展开
-
poj3624及01背包入门题目
题目链接:http://poj.org/problem?id=3624这题是01背包的入门题目,很适合刚学01背包的人写,下面是我的代码,其实你也可以用二维写,因为我一下午都在刷01背包,习惯了这种写法,其实01背包都是种模式,不过我要特别强调一点,注意数组开的不要太小,否则就是runtime 错误!做01背包问题主要是找到谁是代价,谁是价值,然后一模一样的写就是了!#include原创 2013-04-23 16:14:18 · 852 阅读 · 0 评论 -
POJ 3624 01背包入门题目
#include #include #include #include using namespace std;const int maxn=15005;int value[3500],cost[3500];int f[maxn];int n,m;void zeropack(int cost1,int value1){ for(int i=m; i>=cost1;原创 2013-09-12 20:27:11 · 663 阅读 · 0 评论 -
HDU 3732 多重背包
这道题目意思很简单就是:输入 N 和 C ,N是代表N行,而C是复杂性,输入一些单词,然后告诉这些单词的价值,还有这些单词的复杂性! 一开始我一看这个题目就以为是01背包,然后就马上写完,第一组测试数据过了,但是却WA!后来看别人的博客,发现用多重背包,就想想,后来想通了,首先用01背包做第一组数据之所以能过,是因为第一组数据没有给出重复的单词,如果给出重复的单词就会出现数目的问题,就不能用原创 2013-09-12 18:40:40 · 739 阅读 · 0 评论 -
poj 3628 01背包
这道题目的意思看了好久,看了discuss后,写了一下,竟然WA了,后来看了别人的博客才发现与我所理解的意思刚好相反!!英语不行真命苦啊!!这里我大致说一下题目意思:输入 n 和 b,其中n是指奶牛的数量,b则是指书架的高度,然后奶牛之间叠罗汉,找出超出书架的值中取最小的!!代码如下:#include #include #include #include using namesp原创 2013-09-12 21:21:45 · 608 阅读 · 0 评论 -
HDU 2191 多重背包
这道题目以前也看过,但是没学多重背包,就没做,今天做一下,思路要清晰,一定要搞清楚,谁是背包容量,这里背包容量就是所带的钱,单价是cost,粮食的重量是value,代码如下:#include #include #include #include using namespace std;const int maxn=20005;int value[maxn],cost[maxn],原创 2013-09-11 18:16:21 · 486 阅读 · 0 评论 -
HDU 1059多重背包
#include #include #include #include using namespace std;const int maxn=200005;int cost[10],value[10];int f[maxn];int a[7];int v;void zeropack(int cost1,int value1){ for(int i=v; i>=co原创 2013-09-11 22:13:52 · 498 阅读 · 0 评论 -
HDU 1171 多重背包
这道题目真是各种小陷阱啊!我发现了必须看题,我一开始做时,看一下直接是以输入-1为终止条件,可是提交上去就是一直错,哎!后来看了别人代码发现是N>=0,再看一下题目的确啊!是以负整数输入为终止条件!!!还有这题就是范围不是题目所给的!一定要开大来!!!这样就能AC了!!#include #include #include #include using namespace std;con原创 2013-09-11 15:39:35 · 520 阅读 · 0 评论 -
HDU 2844
这是一道多重背包的题目,所谓多重背包,就是选取的物品数量有所限制,并不是像完全背包一样无限次选,也并不是像01背包一样选一次!!多重背包只要理解了这段代码就好办了:代码如下:#include #include #include #include using namespace std;const int maxn=100005;int cost[maxn],value[maxn]原创 2013-09-11 14:44:05 · 642 阅读 · 0 评论 -
HDU 1114 && POJ 1384
这道题目就是裸的完全背包题目,题目中还涉及到一个初始化的问题,就是恰好装满!!那么初始化就是 f[0]=0; for(i=1; i<maxn; i++) f[i]=inf;HDU 1114 & poj 1384#include #include #include #include using namespace std;const int maxn=50005;c原创 2013-09-10 20:04:09 · 572 阅读 · 0 评论 -
HDU 2602 01背包中两种写法
做背包题目:要注意一点就是各个数组的初始化!01背包中初始化要分两种情况:1:恰好装满,就是const int inf=0x3f3f3f3f; f[0]=0; for(i=1; i<maxn; i++){ f[i]=inf;}2:如果没有要求恰好装满!!!那就可以这样赋值!for(i=0; i<maxn; i++){ f[i]=0;}//一原创 2013-09-09 20:28:37 · 476 阅读 · 0 评论 -
杭电4508
这是一道完全背包,完全背包和01背包的区别是:01背包是每种物品只有一种,只能拿一个或一次!而完全背包是可以拿几个!状态转移方程是:procedure CompletePack(cost,weight) for v=cost..V f[v]=max{f[v],f[v-c[i]]+w[i]}///而该题的解题代码为:#include#include原创 2013-05-11 20:32:54 · 575 阅读 · 0 评论 -
01背包
动态规划的基本思想:将一个问题分解为子问题递归求解,且将中间结果保存以避免重复计算。通常用来求最优解,且最优解的局部也是最优的。求解过程产生多个决策序列,下一步总是依赖上一步的结果,自底向上的求解。动态规划算法可分解成从先到后的4个步骤:1. 描述一个最优解的结构,寻找子问题,对问题进行划分。2. 定义状态。往往将和子问题相关的各个变量的一组取值定义为一个状态。转载 2013-04-17 22:37:54 · 450 阅读 · 0 评论 -
杭电2955题解题报告及01背包问题
这题要先这样想,把每个银行的钱看作是代价,而不被抓住的概率是价值!这样就简单多了,直接01背包搞起,其实01背包的代码都是差不多,只不过是有些地方要改变,而且做01背包问题主要是找到谁是代价,谁是价值!这样就直接套公式了!#include#include#include#includeusing namespace std;double dp[10010];int va原创 2013-04-23 15:49:05 · 921 阅读 · 0 评论 -
背包九讲
背包问题九讲P01: 01 背包问题题目有 N 件物品和一个容量为 V 的背包。第 i 件物品的费用是 c[i],价值是 w[i]。求解将哪些物品装入背包可使价值总和最大。基本思路这是最基础的背包问题,特点是:每种物品仅有一件,可以选择放或不放。用子问题定义状态:即 f[i][v]表示前 i 件物品恰放入一个容量为 v 的背包可以获得的最大价值。则其状态转移方程便是转载 2013-04-23 15:13:59 · 508 阅读 · 0 评论 -
杭电1203及01背包概率题
这是一道01背包概率题目,从正面考虑会有好多中情况,那么我们就可以从反面来考虑,直接考虑达到费用最大时一个学校都没有录取他时的最小概率,然后用一减就是至少得到一份通知书的最大概率,这题也是01背包的入门题目!#includeconst int maxn=10005;double dp[maxn];int value[maxn];double weight[maxn];int原创 2013-04-23 17:02:08 · 848 阅读 · 0 评论 -
杭电2546题解题报告及01背包问题
这是我开始尝试着做背包问题,其实背包问题就是一个模式,掌握其二维的转移方程及一维的状态转移方程!#include#include#include#includeusing namespace std;const int maxn=1005;int dp[maxn];int value[maxn];int weight[maxn];int nvalue;i原创 2013-04-23 15:11:53 · 853 阅读 · 0 评论 -
HDU 1864 01背包
#include #include #include #include using namespace std;const int maxn=5000005;int f[maxn];int num[50];double q;int t;int main(){ int i,j,n,m; double x; int ta,tb,tc,r; ch原创 2013-09-22 20:27:06 · 550 阅读 · 0 评论