根据$2^b$分组,组内处理出g[i][j]表示当容量为$j\cdot 2^{i}$且只能选b=i时最大价值,再组间dp用f[i][j]表示当容量为$j\cdot 2^{i}+(w\&(2^{i}-1))$且只能选$b<=i$时的最大价值(j的范围只有$\sum_{i=1}^{n}ai$,即使所有b都在一起也不会超过)

 1 #include<bits/stdc++.h>
2 using namespace std;
3 int n,m,a,b,v,g[35][1005],f[35][1005];
4 int main(){
5 while (scanf("%d%d",&n,&m)!=EOF){
6 if ((n<0)&&(m<0))return 0;
7 memset(g,0,sizeof(g));
8 memset(f,0,sizeof(f));
9 for(int i=1;i<=n;i++){
10 scanf("%d%d",&a,&v);
11 b=0;
12 while (a%2==0){
13 a/=2;
14 b++;
15 }
16 for(int j=1000;j>=a;j--)g[b][j]=max(g[b][j],g[b][j-a]+v);
17 }
18 memcpy(f[0],g[0],sizeof(g[0]));
19 for(int i=1;i<=30;i++){
20 int p=((m>>i-1)&1);
21 for(int j=1000;j>=0;j--)
22 for(int k=1000-p;k>=0;k-=2){
23 int l=j+(k-p>>1);
24 if (l<=1000)f[i][l]=max(f[i][l],f[i-1][k]+g[i][j]);
25 }
26 }
27 printf("%d\n",f[30][0]);
28 }
29 }

[bzoj1190]梦幻岛宝珠的更多相关文章

  1. luogu3188/bzoj1190 梦幻岛宝珠 (分层背包dp)

    他都告诉你能拆了 那就拆呗.把每个重量拆成$a*2^b$的形式 然后对于每个不同的b,先分开做30个背包 再设f[i][j]表示b<=i的物品中 容量为$ j*2^i+W\&((1< ...

  2. 【BZOJ1190】[HNOI2007]梦幻岛宝珠 分层背包DP

    [BZOJ1190][HNOI2007]梦幻岛宝珠 Description 给你N颗宝石,每颗宝石都有重量和价值.要你从这些宝石中选取一些宝石,保证总重量不超过W,且总价值最大为,并输出最大的总价值. ...

  3. [BZOJ 1190][HNOI2007]梦幻岛宝珠

    1190: [HNOI2007]梦幻岛宝珠 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1057  Solved: 611[Submit][Stat ...

  4. BZOJ 1190 [HNOI2007]梦幻岛宝珠(背包)

    1190: [HNOI2007]梦幻岛宝珠 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1385  Solved: 798[Submit][Stat ...

  5. E - 梦幻岛宝珠 HYSBZ - 1190 变形01背包 难

    E - 梦幻岛宝珠 HYSBZ - 1190 这个题目我觉得很难,看题解都看了很久. 首先可以得到一个大概的思路就是分组,每一个数都可以分成 a*2^b  所以把b相同的数都分成一个组. 在每一组内部 ...

  6. luogu 3188 [HNOI2007]梦幻岛宝珠

    LINK:梦幻岛宝珠 时隔多日 我再次挑战这道题.还是以失败告终. 我觉得这一道背包真的有点难度 这是一个数量较少 但是价值和体积较大的背包. 通常的01背包 要不就是体积小 要么是价值小 但这道题给 ...

  7. 【题解】 bzoj1190: [HNOI2007]梦幻岛宝珠 (动态规划)

    bzoj1190,懒得复制,戳我戳我 Solution: 这道题其实是一个背包(分组背包),但是由于数字比较大,就要重新构造dp式子.啃了三天才懂. \(dp[i][j]\)表示背包容积为\(j*2^ ...

  8. bzoj1190 [HNOI2007]梦幻岛宝珠

    传送门:https://www.lydsy.com/JudgeOnline/problem.php?id=1190 [题解] 首先,我们把所有物品都分解成$a\times 2^b$的形式,然后把物品按 ...

  9. bzoj1190 [HNOI2007]梦幻岛宝珠 动态规划

    给你N颗宝石,每颗宝石都有重量和价值.要你从这些宝石中选取一些宝石,保证总重量不超过W,且总价值最大为,并输出最大的总价值.数据范围:N<=100;W<=2^30,并且保证每颗宝石的重量符 ...

随机推荐

  1. Serverless 在 SaaS 领域的最佳实践

    作者 | 计缘 来源 | Serverless 公众号 随着互联网人口红利逐渐减弱,基于流量的增长已经放缓,互联网行业迫切需要找到一片足以承载自身持续增长的新蓝海,产业互联网正是这一宏大背景下的新趋势 ...

  2. typora博客笔记上传图片时不能显示

    前言 markdown具有轻量化.易读易写等特性,并且对于图片.超链接.图片.数学公式都有支持. 但是最近在使用Typora的过程中我发现,在写文章笔记的时候导入的图片,因为图片保存在我们电脑本地,当 ...

  3. 10 月 30 日 北京 LiveVideoStack 阿里云视频云专场限量赠票 100 张

    10 月 30 日 | 北京 LiveVideoStack 将携手阿里云共邀 4 位技术大咖,一同探讨从上云到创新,视频云的新技术与新场景.阿里云视频云依托阿里云服务数百万开发者的卓越服务能力与实践, ...

  4. 洛谷3119 草鉴定(tarjan)

    题目大意 约翰有\(n\)块草场,编号\(1\)到\(n\),这些草场由若干条单行道相连.奶牛贝西是美味牧草的鉴赏家,她想到达尽可能多的草场去品尝牧草. 贝西总是从\(1\)号草场出发,最后回到\(1 ...

  5. SpringBoot入门01-环境部署

    随笔目录: 环境准备 创建过程 编码试行 环境准备 如果编辑器是还没有配置过相关环境的,在用SpringBoot开发项目的时候,需要先环境,spring boot官网建议的开发工具是: STS或Ide ...

  6. L1-017 到底有多二 (15 分) java解题

    1 import java.util.Scanner; 2 3 public class Main { 4 public static void main(String args[]){ 5 doub ...

  7. NX CAM 区域轮廓铣的切削步长

    从NX3.0到NX9.0,默认都是5%.可是实际计算的精确度是不一样的.到NX8.0上发现计算速度特别慢,后来东找西找,设置这个参数可以解决.PS:请慎用!请后后面的官方解释. 官方的解释是: &qu ...

  8. perl 不支持多条件比较

    perl 不支持多条件比较,if(a < $var < b),这个条件表达式在C语言里面是支持的,但是在Perl中必须写成if(($var > a)&&($var & ...

  9. 四万字32图,Kafka知识体系保姆级教程宝典

    本文目录: 一.消息队列 Apache Pulsar Pulsar 与 Kafka 对比 二.Kafka基础 三.Kafka架构及组件 四.Kafka集群操作 五.Kafka的JavaAPI操作 六. ...

  10. 震惊,本Orzer下阶段直接怒送四个笑脸

    众所周知,在hzoi帝国中,Wzx是最菜的.那么究竟有多菜呢?下面就和小编一起来看看吧. 近日,hzoi最菜的wzx在第四阶段竟然怒送4个笑脸,同机房神犇直呼wzx太菜了! 以上就是wzx第四阶段怒送 ...