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.

InputThere 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 i i

-th line of the following n n

line consists two non-negative integers. The first one is the time we need to gather and prepare the i i

-th herb, and the second one is its score.

The total number of different herbs should be no more than 100 100

. All of the other numbers read in are uniform random and should not be more than 10 9  109

.OutputFor each test case, output an integer as the maximum sum of scores.Sample Input

3 70
71 100
69 1
1 2

Sample Output

3

题意:N个物品,以及定容量为M的容器,每个物品有自己的体积和价值,求最大价值。

思路:就是01背包,但是M过大,每个物体的体积也是,我们我们需要优化空间。 这里用map,每次做完01背包后,去掉体积变大,价值没有变大的部分。

好像还可以用搜索做,但是我举得没有这个巧妙。

对于map,我们用iterator来遍历的时候,其实是按下标从小到大遍历的,与插入的顺序无关。  但如果是unordered_map,那么就与插入的顺序无关,所以这个题不能用后者。

#include<bits/stdc++.h>
#define ll long long
using namespace std;
map<int,ll>mp,tmp;
map<int,ll>::iterator it;
int main()
{
int N,M,v,w; ll ans;
while(~scanf("%d%d",&N,&M)){
mp.clear(); mp[]=;
for(int i=;i<=N;i++){
scanf("%d%d",&v,&w);
tmp.clear();
for(it=mp.begin();it!=mp.end();it++){
int x=it->first;ll y=it->second;
if(tmp.find(x)==tmp.end()) tmp[x]=y;
else tmp[x]=max(tmp[x],y);
if(x+v<=M) tmp[x+v]=max(tmp[x+v],y+w);
}
mp.clear(); ll ans=-;
for(it=tmp.begin();it!=tmp.end();it++)
if(it->second>ans){
mp[it->first]=it->second;
ans=it->second;
}
if(i==N) printf("%lld\n",ans);
}
}
return ;
}

HDU - 5887:Herbs Gathering (map优化超大背包)的更多相关文章

  1. hdu 5887 Herbs Gathering (dfs+剪枝 or 超大01背包)

    题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=5887 题解:这题一看像是背包但是显然背包容量太大了所以可以考虑用dfs+剪枝,贪心得到的不 ...

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

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

  3. HDU 5887 Herbs Gathering

    背包,$map$,优化. 和普通背包一样,$map$加一个$erase$优化一下就可以跑的很快了. #pragma comment(linker, "/STACK:1024000000,10 ...

  4. HDU - 5887 2016青岛网络赛 Herbs Gathering(形似01背包的搜索)

    Herbs Gathering 10.76% 1000ms 32768K   Collecting one's own plants for use as herbal medicines is pe ...

  5. HDU 5808 Price List Strike Back bitset优化的背包。。水过去了

    http://acm.hdu.edu.cn/showproblem.php?pid=5808 用bitset<120>dp,表示dp[0] = true,表示0出现过,dp[100] = ...

  6. hdu 5887 搜索+剪枝

    Herbs Gathering Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)T ...

  7. HDU 2159 FATE(二维费用背包)

    FATE Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submi ...

  8. HDU 1712 ACboy needs your help(包背包)

    HDU 1712 ACboy needs your help(包背包) pid=1712">http://acm.hdu.edu.cn/showproblem.php? pid=171 ...

  9. poj1014二进制优化多重背包

    Dividing Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 53029   Accepted: 13506 Descri ...

随机推荐

  1. detectron——test 错误集锦

    一.测试错误,运行如下代码 python2 tools/test_net.py --cfg experiments/e2e_faster_rcnn_resnet--FPN_pascal2007.yam ...

  2. Markdown锚点使用

    为了使得博客看起来更加美观,我更倾向于使用索引,但是如何在Markdown使用索引跳到指定位置呢?以下是使用方法: 具体应用场景: (1)文献列表中链接--可以通过锚实现页面内的链接:引用文献中可能需 ...

  3. centos 6 安装python2.7和pip

    由于scrapy1.0的发布,想在Linux上测试,所以安装了centos6.6:但是它的python版本为2.6,很多东西都不支持,所以需要升级为2.7: 首先是在window7上安装虚拟机,然后安 ...

  4. PHP XML Parser 函数

    PHP XML Parser 简介 XML 函数允许您解析 XML 文档,但无法对其进行验证. XML 是一种用于标准结构化文档交换的数据格式.您可以在我们的 XML 教程 中找到更多有关 XML 的 ...

  5. linux bash shell中,单引号、 双引号,反引号(``)的区别及各种括号的区别

    一.单引号和双引号 首先,单引号和双引号,都是为了解决中间有空格的问题. 因为空格在Linux中时作为一个很典型的分隔符,比如string1=this is astring,这样执行就会报错.为了避免 ...

  6. bzoj1093: [ZJOI2007]最大半连通子图 scc缩点+dag上dp

    一个有向图G=(V,E)称为半连通的(Semi-Connected),如果满足:?u,v∈V,满足u→v或v→u,即对于图中任意两点u,v,存在一条u到v的有向路径或者从v到u的有向路径.若G'=(V ...

  7. Node-Media-Server

    Node-Media-Server (相对稳定可用性高) 主要应用Node.js 实现的RTSP(结合ffmpeg)/RTMP/HTTP/WebSocket/HLS/DASH流媒体服务器 特性 跨平台 ...

  8. fio使用

    关于lat(I/O completion latency).clat(complete latency).slat(summit latency): lat is the total latency. ...

  9. H3C Huawei 交换机 IPv6环境配置

    # 使能IPv6报文转发功能. <Sysname> system-view [Sysname] ipv6 # 使能DHCPv6服务器功能. <Sysname> system-v ...

  10. OLT配置学习

    1.console连接跟一般交换机一样,不赘述 2.修改系统名称 Add Hostname/Device Name: huawei(config)#system sys-info descriptio ...