题目:http://codeforces.com/problemset/problem/3/B

大意是,给定N和V,在给出N个vehicle的类型号(1或2)和各自的载重量,求在不超过V的情况下最大的载重值及其分配方案。

这应该不用01背包,如果用背包Vei数组开不了那么大。那怎么破?因为存在物品空间占用1这一特殊条件,所以只要ka够用就能把V填满,这里可以用贪心做。先把ka和ca各自的数据按照"性价比"(也就是载重量)从大到小排序(V=1的ka在这里扮演着修补的角色,所以我们先装ca再装ka,即先多占用空间)。当ka装完或者空间不能继续装下去的时候即停下来,然后装入ca。先把空间使用完再优化,如果ca的空间利用值高则用它来换掉已装空间值低的ka(用尽可能高的换取尽可能低的,让整个空间的利用率快速增长)。按照这个贪心的思路最终能得到结果。(参考了别人的pair代码,我也学习着用用~)

#include <iostream>
#include<cstdio>
#include<vector>
#include<algorithm>
using namespace std;
const int maxn=1e5+10;
int n,v;
bool cmp(pair<int,int> a,pair<int,int> b){return a.second>b.second;
}
int main()
{//freopen("cin.txt","r",stdin);while(cin>>n>>v){vector<pair<int,int> > ka,ca,ans;int i,j;int a,b,lasta,firstb,val=0;for(i=0;i<n;i++){scanf("%d%d",&a,&b);if(a&1)ka.push_back(make_pair(i+1,b));else ca.push_back(make_pair(i+1,b));}sort(ka.begin(),ka.end(),cmp);sort(ca.begin(),ca.end(),cmp);lasta=firstb=0;while(v>1&&lasta<ca.size()){ans.push_back(ca[lasta++]);v-=2;}while(v>0&&firstb<ka.size()){ans.push_back(ka[firstb++]);v--;}i=lasta-1;    j=firstb;while(j+1<ka.size()&&i>=0){if(ka[j].second+ka[j+1].second>ans[i].second){ans.erase(ans.begin()+i);ans.push_back(ka[j]);ans.push_back(ka[j+1]);j++;i--;}j++;}if(j==ka.size()-1&&i>=0)if(ka[j].second>ans[i].second){ans.erase(ans.begin()+i);ans.push_back(ka[j]);}for(j=0;j<ans.size();j++){val+=ans[j].second;}if(val){printf("%d\n",val);for(int q=0;q<ans.size()-1;q++){printf("%d ",ans[q].first);}printf("%d\n",ans[ans.size()-1].first);}else printf("0\n");}return 0;
}

题目中有这样一句话:"In the second line print a string consisting of the numbers of the vehicles that make the optimal set." 开始我一直认为是输出type:0或1,但是一直死在test 2,后来看了别人的代码才知道是编号1,2,3,4,……

codeforce 3B. Lorry(贪心)相关推荐

  1. codeforce 3B lorry (贪心)

    有货车运量V: 有若干物品A 占2单位体积,有若干物品B占1单位体积: 相同种类的物品价值不一定一样: 序号按照输入顺序而定: 问货车可以拉走最多多少价值的物品,并输出所选物品的序号: 思路:贪心,先 ...

  2. CodeForces 3B Lorry 贪心

    题目大意是有体积为v的背包,有体积为1和2的两种物品若干,这些物品都有各自的价值.求如何取这些物品可使背包中物品的价值最大. 开始一看到是背包就傻眼了==因为数据量太大1 ≤ n ≤ 105; 1 ≤ ...

  3. CF 3B. Lorry

    CF 3B. Lorry   点击打开链接 题意:有体积为1或2的物品共n种 你的容量为m,求你最多可以拿到多少价值的物品. 思路:贪心的思维 再加上尺取法求得最大的价值,这是我看大佬的博客才写出来的 ...

  4. 【CF】3B Lorry

    这道题目网上有几个题解,均有问题.其实就是简单的贪心+排序,没必要做的那么复杂. 一旦tot+curv > v时,显然curv==2, 有三种可能: (1)取出最小的curv==1的pp,装入当 ...

  5. 每日一套codeforce集训1119E[贪心],821C[栈模拟],645D[拓扑排序]

    有n种长度的棍子,长度分别为2^0 ,2 ^ 1,-,2 ^ (n-1) ,每种棍子有a[i] 种,问你能组成多少个三角形. 三角形两边之和大于第三边,而2 ^ i + 2 ^ i = 2 ^ (i+ ...

  6. CodeForces 3-B Lorry

    #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #i ...

  7. CF 3B Lorry

    题目大意:有n(n≤105)(n\leq 10^5)个货物,分为两种,一种占空间1,一种占空间为2,每个货物都有一定的价值,有大小为v(v≤109)(v\leq 10^9)的背包,如何装能够使得价值最 ...

  8. 线段树扫描线求矩形周长详解

    线段树扫描线求矩形周长详解 原创 wucstdio 最后发布于2018-04-24 16:12:09 阅读数 841 收藏 发布于2018-04-24 16:12:09 版权声明:本文为博主原创文章, ...

  9. B. Lorry (贪心)

    点击打开链接 http://codeforces.com/contest/3/problem/B B. Lorry Description A group of tourists is going t ...

最新文章

  1. 为什么 Linux 系统调用会消耗较多资源
  2. openstack的网络、子网、端口的关系
  3. 通过自动回复机器人学Mybatis---加强版
  4. java 线程池 -- (Java并发)
  5. SAP Intelligent Robotic Process Automation权限控制
  6. 淘淘商城项目mysql服务器_SpringMVC+Spring+Mybatis+Mysql+Maven+Svn[ 淘淘商城项目环境搭建 ]...
  7. 量子计算机是程序员的未来,研究者:量子计算机一旦成功问世,时间也许会失去存在的意义...
  8. EntityFramework中常用的数据删除方式
  9. SDN精华问答 | 为什么会出现SDN?
  10. GoldenGate单向复制配置(支持DDL复制)
  11. SQOOP --hive-import 错误(Sqoop Hive exited with status 1)及解决
  12. Jquery中parentsUntil函数调用最容易犯的三个错误
  13. 爬虫单个ip代理设置_代理IP是怎么帮助爬虫持续工作的
  14. abort()和exit()的区别
  15. 在HTML中什么表示水平线,HTML中加入水平线的标签是( )
  16. 深度学习工程实践 5. libtorch+opencv使用复杂的训练分割模型(脸部,头发实现分割)
  17. Sprite Kit 移动精灵
  18. JavaScript 基本面试问题总结
  19. 微信小程序云函数安装wx-server-sdk依赖
  20. 基于不同IP地址下的虚拟主机配置以及基于不同端口下的虚拟主机配置

热门文章

  1. aspen模拟蒸发器_用aspen计算多效蒸发器:高浓盐废水处理蒸发工艺简介
  2. dig是什么意思 java_dig的意思是挖掘,dig deep是什么意思呢?
  3. Java基础系列【导读】
  4. 服务器托管到机房与放在本地的区别
  5. web token身份验证
  6. python爬取《龙岭迷窟》的数据,看看质量剧情还原度到底怎么样
  7. 智慧城市无线充电故障和fitbits总体规划8月以来的热门新闻
  8. java中实现多态的机制
  9. 小微企业调查数据库(2015)
  10. java vips 算法_VIPS:基于视觉的Web页面分页算法[转]