andre_joy

导航

上一页 1 2 3 4 5 6 7 8 ··· 15 下一页

2012年9月22日

小结论(2)

摘要: 处理背包问题时,经常会遇到体积跟价值相等的情况,比如硬币分类问题。那么我们常常用的状态dp[i]代表体积最大为i时对应的最大价值就是一个无用状态了,因为如果i能够达到,那么最大价值也一定是i。所以dp[]可以选择别的含义,比如用的硬币最多,等等…… 阅读全文

posted @ 2012-09-22 10:14 andre_joy 阅读(96) 评论(0) 推荐(0) 编辑

poj 1787

摘要: 地址:http://poj.org/problem?id=1787题意:分硬币,有1,5,10,25四种硬币,给定每种硬币的数量,给定要组合成的价值,问刚好达到价值时用的硬币最多的情况。mark:多重背包!本题给出两种方法,特别注意下面一个方法!!!代码:需要回溯,于是就加一个path[]存放父亲,dp[]代表个数。由于该题有5,10这两个硬币,多重背包二进制优化的时候可能出现5*2,然后本题要区分开来,所以记录一下就行。#include <stdio.h>#include <string.h>#include <stdlib.h>const int N = 阅读全文

posted @ 2012-09-22 10:12 andre_joy 阅读(548) 评论(0) 推荐(0) 编辑

2012年9月21日

poj 3181

摘要: 地址:http://poj.org/problem?id=3181题意:类似分硬币,给n,m,钱是n,有m中硬币,分别是1~m,求多少种分法mark:普通的完全背包不行,会超long long,需要一点高精度的技巧,会大数加法就没问题了。代码:#include <cstdio>#include <cstring>#include <cstdlib>#include <cmath>#include <iostream>#include <algorithm>#include <map>#define LL lon 阅读全文

posted @ 2012-09-21 20:14 andre_joy 阅读(156) 评论(0) 推荐(0) 编辑

小结论(1)

摘要: 普通的完全背包和母函数是dp递推过程的两个经典对等例子。一个是填表法,完全背包就属于这一类,对于每个状态i,计算dp[i]。一个是刷表法,母函数就是,对于每个状态i,更新dp[i]能够到达的状态。 阅读全文

posted @ 2012-09-21 18:53 andre_joy 阅读(93) 评论(0) 推荐(0) 编辑

uva 674

摘要: 地址:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=615题意:有1,5,10,25,50这五种硬币。给一个价值,求有多少种组合可以得到该价值。mark:完全背包。代码:最近学习一些大牛设计状态的思路,首先想到了用dp[i][0]代表体积为i最多的价值,dp[i][1]代表体积为i最多的方法。#include <cstdio>#include <cstring>#include <cstdlib&g 阅读全文

posted @ 2012-09-21 17:04 andre_joy 阅读(499) 评论(0) 推荐(0) 编辑

2012年9月20日

hdu 2126

摘要: 地址:http://acm.hdu.edu.cn/showproblem.php?pid=2126题意:n种物品,给每种物品的价格,自己的钱m,求在满足买的最多个数情况下有几种方案。mark:01背包扩展一下,三维,dp[i][j][k]代表前i种物品,买j个,价值最多为k时的方案数。递推关系式很容易得到。 这是本题排名第一的大牛的博客http://blog.csdn.net/haha593572013/article/details/7869411 之所以可以根据他的第二种方法设计状态,即dp[i][0]代表用最多用i的钱购买数量最多的物品,dp[i][1]代表在购买最多物品的情... 阅读全文

posted @ 2012-09-20 21:51 andre_joy 阅读(450) 评论(3) 推荐(0) 编辑

hdu 3466

摘要: 地址:http://acm.hdu.edu.cn/showproblem.php?pid=3466题意:买东西,每个东西有三个特征值,p代表价格,q代表你手中钱必须不低于q才能买这个物品,v代表得到的价值。mark:又是变种01背包,每做一个变种的,就是一种提高。。 这题因为涉及到q,所以不能直接就01背包了。因为如果一个物品是5 9,一个物品是5 6,对第一个进行背包的时候只有dp[9],dp[10],…,dp[m],再对第二个进行背包的时候,如果是普通的,应该会借用前面的dp[8],dp[7]之类的,但是现在这些值都是0,所以会导致结果出错。于是要想到只有后面要用的值前面都可以得到,那.. 阅读全文

posted @ 2012-09-20 19:52 andre_joy 阅读(874) 评论(0) 推荐(0) 编辑

2012年9月19日

poj 2184

摘要: 地址:http://poj.org/problem?id=2184题意:有很多羊,每只羊有一个幽默度和智商,要选出一些羊,智商加幽默度总和最大,其中智商总和和幽默度总和都不能是负数。mark:变种的01背包,可以把幽默度看成体积,智商看成价值,那么就转换成求体积和价值都为正值的最大值的01背包了。 由于有负数,所以可以每个体积+1000,然后开一个数组记录用该体积得到最大值时用了多少个1000.代码:#include <cstdio>#include <cstring>#include <cstdlib>#include <cmath>#incl 阅读全文

posted @ 2012-09-19 18:39 andre_joy 阅读(1235) 评论(0) 推荐(1) 编辑

hdu 2955

摘要: 地址:http://acm.hdu.edu.cn/showproblem.php?pid=2955题意:抢银行,给出每一个银行的钱和被抓的概率,被抓的总概率低于p才能顺利逃脱,求最多偷多少钱。mark:01背包的转换,需要把偷的钱当作w来考虑。代码:#include <cstdio>#include <cstring>#include <cstdlib>#include <cmath>#include <iostream>#include <algorithm>#include <map>#define LL 阅读全文

posted @ 2012-09-19 15:04 andre_joy 阅读(125) 评论(0) 推荐(0) 编辑

UVa 624

摘要: 地址:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=565题意:背包问题,最多装多少。mark:本题要求输出装的每一个价值,需要回溯一下,必须用二维的。代码:#include <cstdio>#include <cstring>#include <cstdlib>#include <cmath>#include <iostream>#include <algori 阅读全文

posted @ 2012-09-19 11:42 andre_joy 阅读(149) 评论(0) 推荐(0) 编辑

上一页 1 2 3 4 5 6 7 8 ··· 15 下一页