Herbs Gathering

  • 10.76%
  • 1000ms
  • 32768K
 

Collecting one's own plants for use as herbal medicines is perhaps one of the most self-empowering things a person can do, as it implies that they have taken the time and effort to learn about the uses and virtues of the plant and how it might benefit them, how to identify it in its native habitat or how to cultivate it in a garden, and how to prepare it as medicine. It also implies that a person has chosen to take responsibility for their own health and well being, rather than entirely surrender that faculty to another. Consider several different herbs. Each of them has a certain time which needs to be gathered, to be prepared and to be processed. Meanwhile a detailed analysis presents scores as evaluations of each herbs. Our time is running out. The only goal is to maximize the sum of scores for herbs which we can get within a limited time.

Input Format

There are at most ten test cases.

For each case, the first line consists two integers, the total number of different herbs and the time limit.

The ii-th line of the following nn line consists two non-negative integers.

The first one is the time we need to gather and prepare the ii-th herb, and the second one is its score.

The total number of different herbs should be no more than 100100. All of the other numbers read in are uniform random and should not be more than 10^9109.

Output Format

For each test case, output an integer as the maximum sum of scores.

样例输入

3 70
71 100
69 1
1 2

样例输出

3

题目来源

ACM-ICPC 2016 Qingdao Preliminary Contest

看似01背包,然而体积高达10^9,无法记录状态。仔细看发现n的大小只有100,然后就想到了搜索。

先对体积排了个序(降序),再加了两个后缀的剪枝:

1.如果后面加起来都不比原来的大就return

2.后面加起来不超限制就一起放,return

而这里的降序就使得剪枝得到最大化的利用(体积小的都集中在后面)。

#include<stdio.h>
#include<string.h>
#include<algorithm>
#define MAX 105
#define INF 0x3f3f3f3f
using namespace std;
typedef long long ll; struct Node{
ll v,w;
}a[MAX];
ll bv[MAX],bw[MAX];
bool cmp(Node a,Node b){
return a.v>b.v;
}
ll n,m;
ll ans;
void dfs(ll v,ll w,ll i){
if(i>n){
ans=max(ans,w);
return;
}
if(w+bw[i]<=ans) return;
if(v+bv[i]<=m){
ans=max(ans,w+bw[i]);
return;
}
if(v+a[i].v<=m) dfs(v+a[i].v,w+a[i].w,i+);
dfs(v,w,i+);
}
int main()
{
int i;
while(~scanf("%lld%lld",&n,&m)){
for(i=;i<=n;i++){
scanf("%lld%lld",&a[i].v,&a[i].w);
}
sort(a+,a+n+,cmp);
bv[n]=a[n].v;
for(i=n-;i>=;i--){
bv[i]=bv[i+]+a[i].v;
}
bw[n]=a[n].w;
for(i=n-;i>=;i--){
bw[i]=bw[i+]+a[i].w;
}
ans=;
dfs(,,);
printf("%lld\n",ans);
}
return ;
}

HDU - 5887 2016青岛网络赛 Herbs Gathering(形似01背包的搜索)的更多相关文章

  1. HDU - 5878 2016青岛网络赛 I Count Two Three(打表+二分)

    I Count Two Three 31.1% 1000ms 32768K   I will show you the most popular board game in the Shanghai ...

  2. HDU 5880 Family View (2016 青岛网络赛 C题,AC自动机)

    题目链接  2016 青岛网络赛  Problem C 题意  给出一些敏感词,和一篇文章.现在要屏蔽这篇文章中所有出现过的敏感词,屏蔽掉的用$'*'$表示. 建立$AC$自动机,查询的时候沿着$fa ...

  3. HDU5887 Herbs Gathering(2016青岛网络赛 搜索 剪枝)

    背包问题,由于数据大不容易dp,改为剪枝,先按性价比排序,若剩下的背包空间都以最高性价比选时不会比已找到的最优解更好时则剪枝,即 if(val + (LD)pk[d].val / (LD)pk[d]. ...

  4. HDU 5886 Tower Defence(2016青岛网络赛 I题,树的直径 + DP)

    题目链接  2016 Qingdao Online Problem I 题意  在一棵给定的树上删掉一条边,求剩下两棵树的树的直径中较长那的那个长度的期望,答案乘上$n-1$后输出. 先把原来那棵树的 ...

  5. HDU5880 Family View(2016青岛网络赛 AC自动机)

    题意:将匹配的串用'*'代替 tips: 1 注意内存的使用,据说g++中指针占8字节,c++4字节,所以用g++交会MLE 2 注意这种例子, 12abcdbcabc 故失败指针要一直往下走,否则会 ...

  6. 2016青岛网络赛 Barricade

    Barricade Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Proble ...

  7. 2016青岛网络赛 Sort

    Sort Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Problem Des ...

  8. 2016青岛网络赛 The Best Path

    The Best Path Time Limit: 9000/3000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) Pr ...

  9. HDU 5877 2016大连网络赛 Weak Pair(树状数组,线段树,动态开点,启发式合并,可持久化线段树)

    Weak Pair Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others) Tota ...

随机推荐

  1. mvn deploy

    mvn:deploy在整合或者发布环境下执行,将最终版本的包拷贝到远程的repository,使得其他的开发者或者工程可以共享. 以将ojdbc14传到nexus中的thirdparty为例 一 配置 ...

  2. 云服务器 ECS Linux CentOS 修改内核引导顺序

    由于 CentOS 7 使用 grub2 作为引导程序,所以和 CentOS 6 有所不同,并不是修改 /etc/grub.conf 来修改启动项,需要如下操作: 1. 查看系统内部有多少个内核: c ...

  3. packages/wepy-web/src/wx.js 分析storage 的加载原理 wx.getStorage(OBJECT)

    是小程序实例化后 读入内存 还是每次调用从文件系统读取 https://github.com/Tencent/wepy/blob/bd0003dca2bfb9581134e1b05d4aa1d80fc ...

  4. 【题解】CF45G Prime Problem

    [题解]CF45G Prime Problem 哥德巴赫板子题? \(\frac{n(n+1)}{2}\)若是质数,则不需要分了. 上式 若是奇数,那么拆成2和另一个数. 上式 若是偶数吗,直接\(O ...

  5. wampserver发布常见问题

    1 之前使用wamp在本地通过localhost访问PHP网站,一直很正常,最近想要发布至服务器,需要域名解析,发现PHP网站无法使用ip登陆,比如输入ip+端口地址,会报错:you don't ha ...

  6. 使用CL命令编译cpp文件

    缘起,我的vs 2003无法新建工程,又不喜欢用vs 2013那样的重量级开发工具(就写两行代码,测试测试一些基本的语法规则或算法). 想来vs应该可以像GCC或G++那样直接用命令行编译Cpp文件, ...

  7. 《机器学习实战》学习笔记第十三章 —— 利用PCA来简化数据

    相关博文: 吴恩达机器学习笔记(八) —— 降维与主成分分析法(PCA) 主成分分析(PCA)的推导与解释 主要内容: 一.向量內积的几何意义 二.基的变换 三.协方差矩阵 四.PCA求解 一.向量內 ...

  8. linux命令学习笔记(32):gzip命令

    减少文件大小有两个明显的好处,一是可以减少存储空间,二是通过网络传输文件时,可以减少传输的时间. gzip是在Linux系统中经常使用的一个对文件进行压缩和解压缩的命令,既方便又好用.gzip不仅可以 ...

  9. 机器学习 Regularization and model selection

    Regularization and model selection 假设我们为了一个学习问题尝试从几个模型中选择一个合适的模型.例如,我们可能用一个多项式回归模型hθ(x)=g(θ0+θ1x+θ2x ...

  10. UC Bug

    出现bug时,假如把A代码段删了,bug消失,那么此bug是不是一定就是A代码段导致的呢?接着写B代码段,同样bug再现,那么此bug是不是一定就是B代码段导致的呢? 未必,可能是Base代码段和A. ...