HDU3535 AreYouBusy 混合背包】的更多相关文章

题目大意 给出几组物品的体积和价值,每组分为三种:0.组内物品至少选一个:1.组内物品最多选一个:2.组内物品任意选.给出背包容量,求所能得到的最大价值. 注意 仔细审题,把样例好好看完了再答题,否则非常浪费时间! 混合背包 定义DP(i,j)为轮到第1~i组背包内物品总体积严格为j时所能得到的最大价值,实现用滚动数组.(以下i或i-1后都&1) 种类2 把当前的DP(i,..)当作一个关于背包的一维覆盖数组(因为是关于整个背包的数组,所以要把DP(i-1,...)的值拷贝到一维覆盖数组中),对…
HDU3535 AreYouBusy(混合背包) http://acm.hdu.edu.cn/showproblem.php?pid=3535 题意: 给你n个工作集合,给你T的时间去做它们.给你m和s.说明这个工作集合有m件事能够做,它们是s类的工作集合(s=0,1,2,s=0说明这m件事中最少得做一件,s=1说明这m件事中最多仅仅能做一件,s=2说明这m件事你能够做也能够不做). 再给你ci和gi代表你做这件事要用ci的时间,能获得gi的快乐值. 求在T的时间内你能获得的最大快乐值. 分析:…
混合三种背包问题. 定义:dp[i][k]表示体积为k的时候,在前i堆里拿到的最大价值. 第一类,至少选一项,dp初值全赋为负无穷,这样才能保证不会出现都不选的情况.dp[i][k] = max(dp[i][k],max(dp[i-1][k-c]+g,dp[i][k-c]))其中: dp[i][k]是不选当前项dp[i-1][k-c]+g是表示第一次选这组的物品dp[i][k-c]+g表示选择当前物品,并且不是第一次选. 第二类最多选一个,一旦选则是第一次选dp[i][k] = max(dp[i…
题意:给你n组物品和自己有的价值s,每组有l个物品和有一种类型: 0:此组中最少选择一个 1:此组中最多选择一个 2:此组随便选 每种物品有两个值:是需要价值ci,可获得乐趣gi 问在满足条件的情况下,可以得到的最大的乐趣是多少,如果不能满足条件就输出-1 题解:二维01背包 dp[i][j]:前i组物品我们拥有j的价值时最大可获得的乐趣 0:我们需要先把dp[i]所有赋值为负无穷,这样就只能最少选一个才能改变负无穷 1:我们不需要:dp[i][j-ci]+gi(在此组中再选一个),这样就一定最…
http://acm.hdu.edu.cn/showproblem.php?pid=3535 题意:有n组工作,T时间,每个工作组中有m个工作,改组分类是s,s是0是组内至少要做一件,是1时最多做一件,2时随意,每项工作的描述是花费的时间和获得的快乐值,求在T时间内可获的最大快乐值. memset放错位置了,折腾老半天. 分组混合背包,有的取一件或不取,有的随意,有的最少一个 分三种情况讨论 s==0 考虑前面取过时这次取或不取,前一组取过时这次取或不取 s==1 考虑前一组取过时这次取或不取…
3269 混合背包 时间限制: 1 s 空间限制: 256000 KB 题目等级 : 钻石 Diamond 传送门 题目描述 Description 背包体积为V ,给出N个物品,每个物品占用体积为Vi,价值为Wi,每个物品要么至多取1件,要么至多取mi件(mi > 1) , 要么数量无限 , 在所装物品总体积不超过V的前提下所装物品的价值的和的最大值是多少? 输入描述 Input Description 第一行两个数N,V,下面N行每行三个数Vi,Wi,Mi表示每个物品的体积,价值与数量,Mi…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3535 题目意思:给出两个数n,T,分别表示有n个任务集合,T的总时间,对于每个任务集合有两个属性m和type,表示这个任务集合内有m个任务,类型为type,当type=0的时候必须执行一个这个集合内的一个任务,type=1的时候最多可以执行一项,type=2随便你做不做. 思路:不愧是10年多校的题,看到的时候真的是懵逼了.颠覆了对背包的看法,但是这个题肯定是一个混合背包(这个还是看出来了)!首先要…
传送门 [题目大意]给出物品的数量.-1为无限个. [思路]混合背包.... [code] #include<iostream> #include<cstdio> #include<cstdlib> using namespace std; ],v[],c[],dp[]; int main() { int vv,n; scanf("%d%d",&n,&vv); ;i<=n;i++) scanf("%d%d%d"…
题目大意:一道混合背包模板. 解题思路:分三种情况讨论,01和完全没什么问题,多重背包需要把物品分成$\log W[i]$件,然后01即可,分成W[i]件01会TLE. 读优大法好! C++ Code: #include<cstdio> #include<cctype> using namespace std; #define max(i,j)(((i)>(j))?(i):(j)) char buf[4000004]; int bufpos; inline void init…
3269 混合背包  时间限制: 1 s  空间限制: 256000 KB  题目等级 : 钻石 Diamond 题解  查看运行结果     题目描述 Description 背包体积为V ,给出N个物品,每个物品占用体积为Vi,价值为Wi,每个物品要么至多取1件,要么至多取mi件(mi > 1) , 要么数量无限 , 在所装物品总体积不超过V的前提下所装物品的价值的和的最大值是多少? 输入描述 Input Description 第一行两个数N,V,下面N行每行三个数Vi,Wi,Mi表示每个…