动态规划——背包
文章平均质量分 75
dumeichen
这个作者很懒,什么都没留下…
展开
-
poj 3624 01背包
题意:01背包经典问题。思路:动态规划原创 2014-07-09 16:58:36 · 452 阅读 · 0 评论 -
poj 1948 dp(组成面积最大的三角形)
题意:给定n(n思路:首先有了三角形的三边长,求面积显然用海伦公式。其次要考虑怎么组成三角形,想了半天觉得复杂度都会超。后来看题解,发现做法基本都是O(n*sum*sum)即O(40*800*800)的,按说一分钟的时限应该是会超的。反正如果是这样就好写了。dp[i][j]表示用边长i和j(其余一个的边长也就固定了)能否组成三角形。dp只维护左下三角形。最后把能够组成三角形的方案扫一遍求面积即原创 2015-10-03 12:11:00 · 661 阅读 · 0 评论 -
poj 2184 dp(兼具聪明和幽默的奶牛)
题意:有n头奶牛,每个奶牛有一个聪明值和幽默值(-1000)。原创 2014-11-04 20:09:41 · 438 阅读 · 0 评论 -
百练2755 神奇的口袋 背包水
Description有一个神奇的口袋,总的容积是40,用这个口袋可以变出一些物品,这些物品的总体积必须是40。John现在有n个想要得到的物品,每个物品的体积分别是a1,a2……an。John可以从这些物品中选择一些,如果选出的物体的总体积是40,那么利用这个神奇的口袋,John就可以得到这些物品。现在的问题是,John有多少种不同的选择物品的方式。Input输入的第一行是正整数n原创 2015-07-21 19:55:41 · 648 阅读 · 0 评论 -
poj 1112 二部图判定+背包(team them up)
题意:有 n 个人,他们之间可能相互认识。现在想把这些人分成两组,每个组里面所有人都相互认识,如果可以分成这两组,找出两组人数相差最少的情况。思路:如果将n个人之间不是相互认识的连一条边,那么如果整个图能够表示为二部图则必有解,否则无解。有解得情况下,用背包判断即可。题目需要记录的东西比较多,所以开的数组和流程都比较繁琐。其中的连通分支我用一个类似临界表的方式进行存储。每一个连通分支内染两原创 2015-02-17 19:43:26 · 449 阅读 · 0 评论 -
poj 1775 01背包(子集和)
题意:给定一个数n(n思路:方法一:因为n较小,所以先求出方法二:一个逆天的性质:因为1!+2!+3!#include #include #define N 1000000int dp[N+5],f[30],n;int getfac(){ int i; f[0] = 1; f[1] = 1; for(i = 2;f[i-1]<=N;i++)原创 2015-02-01 19:03:38 · 499 阅读 · 0 评论 -
poj 1276 多重背包(用硬币拼出给定面值)
题意:有各种不同面值的货币,每种面值的货币有不同的数量,请找出利用这些货币可以凑成的最接近且小于等于给定的数字cash的金额。思路:简单的完全背包。#include #include #define N 100005int dp[N],num[15],v[15];int n,m;int main(){ while(scanf("%d",&m)!=EOF){原创 2015-01-24 18:18:39 · 462 阅读 · 0 评论 -
poj 1882 背包(从1开始的连续邮票数量)
题意:给出一个上限硬币数量s,给出n套硬币价值,求一套硬币能用不大于s数量的硬币组成从1开始连续的区间价值,其中,如果其最大值相同,输出数量小的,如果再相同,输出最大价值小的。思路:背包。显然要枚举硬币价值。一开始思路是开bool数组记录能否达到,再开used数组记录达到当前总价值的最小所需硬币数量;后来发现只用used一个数组即可。后来参考了另一个人的写法发现还可以优化成完全背包的类似写法。原创 2014-12-04 21:22:36 · 602 阅读 · 0 评论 -
poj 1717 背包dp(翻转骨牌的最少次数)
题意:给成一组多米诺牌,每个多米诺牌由上面和下面两组数组成,现要求可以翻动颠倒上下,使得多米诺上边的点数和减去下边的点数和的绝对值最小。思路:不知道自己写的开两个数组的为什么一直wa。照抄了一个同样思路的代码能AC,错误在哪?????AC代码:#include #include #define max(a,b) ((a)>(b)?(a):(b))#define min(a,b)原创 2015-02-25 15:04:42 · 636 阅读 · 0 评论 -
poj 2576 dp背包/随机交换(体重均分)
题意:有n个人,每个人一个体重值。要求把这两个人平均分成两部分,是的两部分的体重之和的差最小。思路:1、背包dp。把所有人总重量的一半当做value上限,背包限重为(n+1)/2,求最接近value的值。2、随机化.。随机分成两组,然后随机交换。#include #include #define min(a,b) ((a)<(b)?(a):(b))#define N 102in原创 2015-02-07 16:14:12 · 856 阅读 · 0 评论 -
poj 1015 dp(陪审团成员的选择)
感觉有点难度的动态规划,思路参考了(http://blog.csdn.net/lyy289065406/article/details/6671105)。原创 2014-10-11 21:07:03 · 700 阅读 · 0 评论 -
poj 2454 随机化(划片使得选举胜利)
题意:给出3*k个数,每个数的范围为[0,1000]。要求将其分为3个长度为k的序列,使得至少有两个序列的和大于500*k。思路:第一步的贪心比较好想,从大到小排序后后k个数舍弃不考虑。接下来的题意和双机调度(和poj2576题意也比较相近,不过那道题背包能过)有点像,就是让2k个数分成两份,每份k个数,使两组数之和尽可能相近。当然首先想用背包去做,但是一直WA(为啥不是tle呢??),于是看原创 2015-04-04 23:24:40 · 523 阅读 · 0 评论 -
poj 1787 多重背包(硬币付款不找钱)
题意:分硬币,有1,5,10,25四种硬币,给定每种硬币的数量,给定要组合成的价值,问刚好达到价值时用的硬币最多的情况。思路:dp[j] 表示 j 块钱最多由多少块硬币组成, used[j] 表示 j 块钱时,已经放了多少同种类的硬币。(实际上path用一维数组即可,使得 path[j] 表示 上一次最多有多少块构成的 j 块钱)#include #include #include原创 2015-03-30 23:55:46 · 607 阅读 · 0 评论 -
poj 2392 多重背包(堆石头上天)
题意:有一头奶有很多种石头,每种石头的高度是hi,但是不能放到ai之上的高度,并且这种石头有ci个问最高能放多高思路:多重背包要点:首先对每种石头能摆到的最高高度进行升序排序。原创 2014-07-11 17:05:06 · 385 阅读 · 0 评论 -
poj 2754/1014 多重背包之二进制优化
题意:给定M(1思路:如果直接上dp,那么复杂度最大可达M*极差*50。其中M是序列长度,50是因为每个数最多有50个取值的可能,极差是∑Multi[i]*Table[i]能达到的最大值和最小值之间的差值。无法承受。下面考虑将其转化为多重背包问题。将下界单独拿出来作为一部分进行计算,因此[Low[i],Up[i]]就转化为[0, U[i]-L[i]]的一个多重背包。M[i]和P[i]均进行原创 2017-03-31 19:28:46 · 528 阅读 · 0 评论