01背包
Dilly__dally
这个作者很懒,什么都没留下…
展开
-
CF 366C(01背包)
把a-b*k视为重量,a视为价值,背包,因为a-b*k有负数情况,所以要考虑负数容量的情况 把a-b*k视为重量,是因为这样就可以叠加,当a=b*k时,也就是重量为0的状态, 初始没有物品时,重量也为零,所以dp数组初始化要讲重量为0(dp【0】)赋为零,而其余状态刚开始并不存在,所以都赋为负无穷 01 背包 以 a[i] -k* b[i]作为每个物品的重量,以a[i]作为价值 ,...原创 2018-05-18 18:13:38 · 309 阅读 · 0 评论 -
HDU 2546
DP思路:先拿5元出来,对价格排序,把最大的先放一边,对剩下的01背包。状态转移方程: dp[j]=max(dp[j],dp[j-a[i]]+a[i]);注意:1、n=1时直接输出m-a[0];2、m<5时输出m;3、其余情况01背包#include<bits/stdc++.h> using namespace std; #define inf 0x3f3f3f3f #defin...原创 2018-05-17 20:28:07 · 99 阅读 · 0 评论 -
POJ 3624
思路:DP+一维数组(滚动数组)一般的状态转移方程是:dp[i+1][j]=max(dp[i][j],dp[i][j-w[i]]+v[i]此题用二维数组会超内存。如图:原创 2018-05-17 17:31:19 · 251 阅读 · 0 评论 -
HDU 2955
思路:背包问题,原先想的是把概率当做背包,在这个范围内最多能抢多少钱。但是问题出在概率这里,一是因为概率是浮点数,用作背包必须扩大10^n倍来用。二是最大不被抓概率不是简单的累加。二是p = (1-p1)(1-p2)(1-p3) 其中p为最大不被抓概率,p1,p2,p3为各个银行被抓概率。第二次想到把银行的钱当做背包,把概率当做价值,总容量为所有银行的总钱数,求不超过被抓概率的情况下,最大的背包容...原创 2018-05-17 17:18:01 · 101 阅读 · 0 评论