BZOJ 1190 梦幻岛宝珠(分组01背包)】的更多相关文章

跑了7000ms... 这是个体积和价值都超大的背包.但是体积保证为a*2^b的(a<=10,b<=30)形式.且n<=100. 于是可以想到按b来分组.这样的话每组最多为a*n*2^b的体积.把每个分组进行一次01背包. 令dp[i][j]表示体积为j*2^i+w&(1<<i)的最大价值.再把每个分组背包做一次01背包,随便转移一下就行了. # include <cstdio> # include <cstring> # include &l…
题意: 小明有一个贤妻良母型的女朋友,他们两个一起洗衣服. 有M种颜色的N件衣服,要求洗完一种颜色的衣服才能洗另外一种颜色. 两人可以同时洗,一件衣服只能被一个人洗. 给出洗每件衣服所用的时间,求两个人洗完这些衣服所用的最短时间. 分析: 因为每种颜色是分开洗的,所以我们可以单独考虑一种颜色的衣服. 因为洗完这些衣服的总时间是固定的,所以两个人洗的时间尽可能的相等,这样洗完的时间最短. 所以将总时间的一半作为背包容量(这里总时间的奇偶性并不影响),物品的体积和价值都是洗每件衣服所用的时间,然后进…
将一堆正整数分为2组,要求2组的和相差最小.例如:1 2 3 4 5,将1 2 4分为1组,3 5分为1组,两组和相差1,是所有方案中相差最少的.Input第1行:一个数N,N为正整数的数量.第2 - N+1行,N个正整数.(N <= 100, 所有正整数的和 <= 10000)Output输出这个最小差Input示例512345Output示例1 思路: 尽可能的均分为sum/2,但是不能用贪心,明显是错的,样例都举不出来 相当于给了一个sum/2的背包,问能够装的最大值,再计算差值 代码:…
E - 梦幻岛宝珠 HYSBZ - 1190 这个题目我觉得很难,看题解都看了很久. 首先可以得到一个大概的思路就是分组,每一个数都可以分成 a*2^b  所以把b相同的数都分成一个组. 在每一组内部进行01背包,这个操作比较简单. 比较难的是组与组之间进行转移. 定义 dp[i][j] 表示在第i层容量为 j*2^i 的最大价值. 那么怎么从第 i-1 层转移到第 i 层呢? 因为到dp[i][j] 到第 i 层的容量为 第 i 层本身的容量+之前总容量 所以就是 j*2^i+w&((1<…
1190: [HNOI2007]梦幻岛宝珠 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1385  Solved: 798[Submit][Status][Discuss] Description 给你N颗宝石,每颗宝石都有重量和价值.要你从这些宝石中选取一些宝石,保证总重量不超过W,且总价值最大为 ,并输出最大的总价值. 数据范围:N<=100;W<=2^30,并且保证每颗宝石的重量符合a*2^b(a<=10;b<=30) In…
题目链接 把重量表示为\(a\times2^b\)的形式,然后按\(b\)排序. 从高到低枚举每一位,\(f[i]\)表示当前位容量为\(i\)时的最大价值(容量即\(a\times2^{bit}\)).对于同一位,直接\(01\)背包就行了. 如何转移到下一位?\(f[i]\)转移到\(f[i\times2+\text{W在这一位是否为1}]\).注意到每一位的容量不会超过\(n\times a_{max}=1000\),所以再对\(1000\)取\(\min\)即可. //840kb 64m…
1190: [HNOI2007]梦幻岛宝珠 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1057  Solved: 611[Submit][Status][Discuss] Description 给你N颗宝石,每颗宝石都有重量和价值.要你从这些宝石中选取一些宝石,保证总重量不超过W,且总价值最大为,并输出最大的总价值.数据范围:N<=100;W<=2^30,并且保证每颗宝石的重量符合a*2^b(a<=10;b<=30) Inpu…
Description 给你N颗宝石,每颗宝石都有重量和价值.要你从这些宝石中选取一些宝石,保证总重量不超过W,且总价值最大为,并输出最大的总价值. 数据范围:N<=100;W<=2^30,并且保证每颗宝石的重量符合a*2^b(a<=10;b<=30)Input 输入文件中包含多组数据.每组数据的格式如下:第一行是两个正整数n和W,1≤n≤100,1≤W≤2^30,分别表示宝石的数目和最多能带走的宝石重量.接下来的n行,每行有两个正整数weighti和valuei,1≤weight…
题目 https://lydsy.com/JudgeOnline/problem.php?id=1190 题解 好神仙的一道题啊. 既然 \(w_i = a_i\cdot 2^{b_i}\),那么不妨按照 \(b_i\) 来分组,每一组内部先做一个 01 背包,记为 \(f[i][j]\). 然后考虑怎么求出最后的总答案. 下面就是很妙的部分了: \(dp[i][j]\) 表示前 \(i\) 位中,容量 \(\leq j\cdot 2^i+(W\&(2^i-1))\) 的最大价值. 转移的时候我…
1007 正整数分组 基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题 将一堆正整数分为2组,要求2组的和相差最小. 例如:1 2 3 4 5,将1 2 4分为1组,3 5分为1组,两组和相差1,是所有方案中相差最少的. Input 第1行:一个数N,N为正整数的数量. 第2 - N+1行,N个正整数. (N <= 100, 所有正整数的和 <= 10000) Output 输出这个最小差 Input示例 5 1 2 3 4 5 Output示例 1 题目链接…