题解:搜索 meet in the middle

先搜一半,假设某个状态的体积是p,那么就要从另一半里找到体积小于

等于v-p 价值最大的状态。二分+前缀和。

代码:不会前缀和,暴力瞎写的。没有评测的地方..=^=

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define LL long long
using namespace std; int an,bn,n,m,p,q,w[],c[];
LL ans;
struct WP{
LL w,c;
bool operator < (const WP &a) const{
return w<a.w;
}
}wp[]; LL maxx(LL a,LL b){
return a>=b?a:b;
}
int main(){
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++)scanf("%d%d",&w[i],&c[i]);
an=n/;bn=n-an;
for(int st=;st<(<<an);st++){
p++;
for(int i=;i<an;i++){
if((st>>i)&){
wp[p].w+=w[i+];
wp[p].c+=c[i+];
}
}
}
sort(wp+,wp+p+);
for(int st=;st<(<<bn);st++){
WP all;all.w=;all.c=;//清为0
for(int i=;i<bn;i++){
if((st>>i)&){
all.w+=w[n-i];
all.c+=c[n-i];
}
}
WP gg;gg.w=m-all.w;gg.c=;
int cc=upper_bound(wp+,wp+p+,gg)-wp;
// cout<<all.w<<" " <<gg.w<<" "<<cc<<endl;
for(int i=;i<cc;i++)
ans=maxx(ans,all.c+wp[i].c);
}
printf("%lld\n",ans);
return ;
}

背包搜索--LH的更多相关文章

  1. Dividing (多重背包 搜索)

    / 第一个多重背包题目 真的不理解二进制优化 /http://acm.hdu.edu.cn/webcontest/contest_showproblem.php?cid=10594&pid=1 ...

  2. Ignatius and the Princess III(方案背包+搜索)

    就是问你,n这个数可以被多少种方案组成. 比如: 算是,方案+完全背包的模板题了. #include<iostream> #include<cstring> using nam ...

  3. 洛谷 P1964 【mc生存】卖东西

    P1964 [mc生存]卖东西 题目背景 服务器好好玩 题目描述 lcy0x1去服务器的系统商店卖东西. 一个人的背包有21格. 一开始他的背包里有m件不同的物品(不能卖). 他要卖n种物品,每种物品 ...

  4. 【u204】高级砝码称重

    Time Limit: 1 second Memory Limit: 128 MB [问题描述] 现有n个砝码,重量分别为a1,a2,a3,--,an,在去掉m个砝码后,问最多能称量出多少不同的重量( ...

  5. poj 3628 (搜索or背包)

    好久没看背包题目了!!!生疏了!!!! 这题是背包题!!!不过对于这题,解决方法还是搜索省时!!! 题意:第一行给你一个N和VV,接下来N行,每行一个数,求得是任选N个数组合求和,求组合的和大于VV而 ...

  6. Bone Collector(01背包+记忆化搜索)

    Bone Collector Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other) Tota ...

  7. HDU 5887 Herbs Gathering(搜索求01背包)

    http://acm.hdu.edu.cn/showproblem.php?pid=5887 题意: 容量很大的01背包. 思路: 因为这道题目背包容量比较大,所以用dp是行不通的.所以得用搜索来做, ...

  8. Unity 背包道具搜索

    因为背包有很多道具,用户要根据不同需要搜索出不同的道具.  道具的属性有非常居多,游戏快开发完毕的时候,突然发现ItemManager类里面几乎每一个搜索方法都有一个foreach循环, 循环里面因为 ...

  9. nyoj 456——邮票分你一半——————【背包思想搜索】

    邮票分你一半 时间限制:1000 ms  |  内存限制:65535 KB 难度:3   描述      小珂最近收集了些邮票,他想把其中的一些给他的好朋友小明.每张邮票上都有分值,他们想把这些邮票分 ...

随机推荐

  1. 软件测试人员需要精通的开发语言(3)--- Linux

    Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户.多任务.支持多线程和多CPU的操作系统.不得不说下,中国产的红旗系统,牛的一逼,造价很贵,但具体何用处估 ...

  2. hdu 5969 最大的位或

    最大的位或 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submi ...

  3. js城市联动选择器

    <html> <head> <META charset="utf8"> <script type="text/javascrip ...

  4. Java 重写 equals 与 hashCode 的注意事项

    为什么重写 equals 的时候必须重写 hashCode 大家可能从很多教程中了解到: SUN官方的文档中规定"如果重定义equals方法,就必须重定义hashCode方法,以便用户可以将 ...

  5. 【JavaScript专题】--- 立即执行函数表达式

    一 什么是立即执行函数表达式 立即执行函数表达式,其实也可以叫初始化函数表达式,英文名:IIFE,immediately-inovked-function expression.立即执行函数表达式就是 ...

  6. Android笔记之使用Glide加载网络图片、下载图片

    Glide简介 不想说太多,真的很方便:P)可以节省我不少时间 GitHub地址:https://github.com/bumptech/glide 加载网络图片到ImageView Glide.wi ...

  7. hive查询注意及优化tips

    Hive是将符合SQL语法的字符串解析生成可以在Hadoop上执行的MapReduce的工具.使用Hive尽量按照分布式计算的一些特点来设计sql,和传统关系型数据库有区别, 所以需要去掉原有关系型数 ...

  8. 用cocos2d-html5做的消除类游戏《英雄爱消除》(4)——游戏结束

    游戏结束界面: 在前面几个教程中,这个界面的创作所需要的知识点基本我们都讲过了,这里就说下用户数据的缓存吧,也是先来看下源码 /** * Power by html5中文网(html5china.co ...

  9. 《程序员代码面试指南》第一章 栈和队列 设计一个有getMin功能的栈

    题目 实现一个特殊的栈,在实现栈的基本功能上,再实现返回栈中最小的元素的操作 要求 1. pop.push.getMin操作时间复杂度都是O(1) 2. 设计的栈类型可以使用现成的栈结构 java代码 ...

  10. Python- and & or 的短路原则

    条件1 and 条件2 条件1 or 条件2 短路原则 对于and 如果前面的第一个条件为假,那么这个and前后两个条件组成的表达式的计算结果就一定为假,第二个条件就不会被计算 对于or 如果前面的第 ...