题目大意:
  有$n(n\leq 10^5)$个物品,背包的容量为$m(m\leq 10^9)$。每个物品有重量$w_i(w_i\in\{1,2\})$和价值$v_i(v_i\leq 10^4)$。问最多能装下总价值为多少的物品,并输出任意一种方案。

思路:
  贪心。
  首先对两种物品分别排序,从大到小贪心,尽可能把重量为$1$的物品选上去,不够的用重量为$2$的补。然后用重量为$2$的替换掉一部分重量为$1$的,看一下时候会把答案变大。

 #include<cstdio>
#include<cctype>
#include<vector>
#include<algorithm>
inline int getint() {
register char ch;
while(!isdigit(ch=getchar()));
register int x=ch^'';
while(isdigit(ch=getchar())) x=(((x<<)+x)<<)+(ch^'');
return x;
}
const int N=;
bool b[N];
std::vector<std::pair<int,int> > v[];
int main() {
const int n=getint();
int m=getint(),tmp=,ans=,j=;
for(register int i=;i<=n;i++) {
const int x=getint();
tmp+=x;
v[x-].push_back(std::make_pair(getint(),i));
}
m=std::min(m,tmp);
std::sort(v[].rbegin(),v[].rend());
std::sort(v[].rbegin(),v[].rend());
v[].resize(std::min((int)v[].size(),m));
for(register int i=;i<(int)v[].size();i++) {
ans+=v[][i].first;
b[v[][i].second]=true;
}
for(register int i=v[].size();i<m;i++) {
v[].push_back(std::make_pair(,));
}
std::sort(v[].begin(),v[].end());
for(register int i=;i+<(int)v[].size()&&v[][j].first>v[][i].first+v[][i+].first;i+=,j++) {
ans+=v[][j].first-v[][i].first-v[][i+].first;
b[v[][i].second]=b[v[][i+].second]=false;
b[v[][j].second]=true;
}
printf("%d\n",ans);
for(register int i=;i<=n;i++) {
if(b[i]) printf("%d ",i);
}
return ;
}

[CF3B]Lorry的更多相关文章

  1. [CF3B] Lorry - 贪心

    有一辆载重量为 v 的货车, 准备运送两种物品. 物品 A 的重量为 1, 物体 B 的重量为 2, 每个物品都有一个价值. 求货车可以运送的物品的最大价值. Solution 考虑把物品分为两类,枚 ...

  2. Codeforces Beta Round #3 B. Lorry 暴力 二分

    B. Lorry 题目连接: http://www.codeforces.com/contest/3/problem/B Description A group of tourists is goin ...

  3. 【CF】3B Lorry

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

  4. 3 B. Lorry

    题目大意:给你两种物品,每种物品有一个价值和花费,花费只有两种,一种花费为 , 一种花费为2.. 给你一个背包容量为v, 求当前容量下所能达到的最大价值. ====================== ...

  5. JAVA 入门第二章 (面对对象)

    本渣渣鸽了一个月终于有时间更新.因为有c++基础,学起来这章还是比较简单的,本章我觉得是程序猿质变课程,理解面向对象的思想,掌握面向对象的基本原则以及 Java 面向对象编程基本实现原理,熟练使用封装 ...

  6. 【源码分享】WPF漂亮界面框架实现原理分析及源码分享

    1 源码下载 2 OSGi.NET插件应用架构概述 3 漂亮界面框架原理概述 4 漂亮界面框架实现  4.1 主程序  4.2 主程序与插件的通讯   4.2.1 主程序获取插件注册的服务   4.2 ...

  7. 【MVC】自定义Scaffold Template

    MVC提供了基本的CRUD Scaffold Template模板,创建视图的时候,只要勾选创建一个强类型视图 , 并选择模型类,就可以选择支架模板了,这些模板包括List,Detail,Create ...

  8. .VDI manual Technical Logistics - Volume 2: Industrial Trucks

    VDI manual Technical Logistics - Volume 2: Industrial Trucks Name Publication date: State VDI 2196 B ...

  9. js程序设计03——面向对象

    ECMAScript中有2中属性:数据属性.访问器属性. 数据属性是为了指定某对象的指定key上的一些行为,比如value是否可删除.修改.key可循环遍历等特点.而访问器属性不包含数据值,包含一堆g ...

随机推荐

  1. springboot整合jersey

    https://blog.csdn.net/xiongpei00/article/details/76576420

  2. docker部署思路

    1.docker安装2.拉取centos镜像或者Ubuntu镜像 看你用哪个3.使用镜像,run出来一个容器A4.进入容器A,安装uwsgi,把Django部署在下面5.在启动脚本中配置开机自启动脚本 ...

  3. Python全栈工程师(Linux基本操作)

    ParisGabriel         Python 入门基础        Linux :Ubuntu操作系统   首先我们说的是Linux操作系统常用的快捷键以及终端命令   一. VMware ...

  4. elk-filebeat收集docker容器日志

    目录 使用docker搭建elk filebeat安装与配置 docker容器设置 参考文章 首发地址 使用docker搭建elk 1.使用docker-compose文件构建elk.文件如下: ve ...

  5. bayes学习笔记

    贝叶斯(BAYES)判别思想是根据先验概率求出后验概率,并依据后验概率分布作出统计推断.所谓先验概率,就是用概率来描述人们事先对所研究的对象的认识的程度:所谓后验概率,就是根据具体资料.先验概率.特定 ...

  6. JavaWeb笔记(六)MVC与三层架构

    MVC M Model 模型 JavaBean 完成具体的业务操作,如:查询数据库,封装对象 V View 视图 JSP 展示数据 C Controller 控制器 Servlet 获取用户输入,调用 ...

  7. oracle定时job粗解

    其中一篇随笔我写了oracle的存储过程大概的介绍,存储过程除了自身有in的param,来进行程序调用处理之外,还可以通过定时任务的方式调用来执行. 应用场景: 数据同步:有两个显示菜单,“信息编辑” ...

  8. HDU 6034 Balala Power!(贪心+排序)

    Balala Power! Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) ...

  9. [bzoj1798][Ahoi2009]Seq 维护序列seq ([洛谷P3373]【模板】线段树 2)

    题目大意:有$n$个数,有$m$个操作,有三种: $1\;l\;r\;x:$把区间$[l,r]$内的数乘上$x$ $2\;l\;r\;x:$把区间$[l,r]$内的数加上$x$ $3\;l\;r:$询 ...

  10. POJ 2942 Knights of the Round Table 补图+tarjan求点双联通分量+二分图染色+debug

    题面还好,就不描述了 重点说题解: 由于仇恨关系不好处理,所以可以搞补图存不仇恨关系, 如果一个桌子上面的人能坐到一起,显然他们满足能构成一个环 所以跑点双联通分量 求点双联通分量我用的是向栈中pus ...