题目大意:
  有$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$的,看一下时候会把答案变大。

 1 #include<cstdio>
 2 #include<cctype>
 3 #include<vector>
 4 #include<algorithm>
 5 inline int getint() {
 6     register char ch;
 7     while(!isdigit(ch=getchar()));
 8     register int x=ch^'0';
 9     while(isdigit(ch=getchar())) x=(((x<<2)+x)<<1)+(ch^'0');
10     return x;
11 }
12 const int N=100001;
13 bool b[N];
14 std::vector<std::pair<int,int> > v[2];
15 int main() {
16     const int n=getint();
17     int m=getint(),tmp=0,ans=0,j=0;
18     for(register int i=1;i<=n;i++) {
19         const int x=getint();
20         tmp+=x;
21         v[x-1].push_back(std::make_pair(getint(),i));
22     }
23     m=std::min(m,tmp);
24     std::sort(v[0].rbegin(),v[0].rend());
25     std::sort(v[1].rbegin(),v[1].rend());
26     v[0].resize(std::min((int)v[0].size(),m));
27     for(register int i=0;i<(int)v[0].size();i++) {
28         ans+=v[0][i].first;
29         b[v[0][i].second]=true;
30     }
31     for(register int i=v[0].size();i<m;i++) {
32         v[0].push_back(std::make_pair(0,0));
33     }
34     std::sort(v[0].begin(),v[0].end());
35     for(register int i=0;i+1<(int)v[0].size()&&v[1][j].first>v[0][i].first+v[0][i+1].first;i+=2,j++) {
36         ans+=v[1][j].first-v[0][i].first-v[0][i+1].first;
37         b[v[0][i].second]=b[v[0][i+1].second]=false;
38         b[v[1][j].second]=true;
39     }
40     printf("%d\n",ans);
41     for(register int i=1;i<=n;i++) {
42         if(b[i]) printf("%d ",i);
43     }
44     return 0;
45 }

转载于:https://www.cnblogs.com/skylee03/p/8257460.html

[CF3B]Lorry相关推荐

  1. CF3B Lorry

    CF3B Lorry Greedy 将两种体积的物体分类 组内按价值从大往小排序 枚举A物品选几个,算出B最多能选几个 这样既可 代码: #include<bits/stdc++.h> u ...

  2. 【CodeForces】CF3B Lorry

    题目地址: https://www.luogu.com.cn/problem/CF3B 题意翻译: 有一辆载重量为vvv的货车, 准备运送两种物品. 物品A的重量为111,物体B的重量为222,每个物 ...

  3. CF3B Lorry (手动模拟01背包,贪心)难度⭐⭐⭐

    这道题洛谷上的翻译是错的,最后输出格式那里应该是输出一行所选物品的编号,中间用空格隔开 手动模拟01背包 这道题看上去很像是01背包的模板题,但是很明显,v=1e9,正常的01背包是肯定会爆掉62MB ...

  4. CF3B--Lorry翻译

    原题链接-- Lorry | JXNUOJNOJ is yet another Online Judge providing you functions like problem solving, d ...

  5. B. Lorry (贪心)

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

  6. CF 3B. Lorry

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

  7. Lorry翻译(day 2)

    来源:codeforces.https://codeforces.com/contest/3/problem/B Lorry A group of tourists is going to kayak ...

  8. CodeForces 3B Lorry 贪心

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

  9. mining lorry和mining truck有什么不同。

    适用地区不同 truck与lorry同义,都指卡车或货车,前者为美国用词,后者用于英国. 这些矿用自卸车用于在建筑工地.砾石坑和露天矿的未铺砌道路上拖运/运输大量材料,例如泥土.岩石.煤炭和其他骨料.

最新文章

  1. spring aop 之链式调用
  2. 浅析Node模块中module.exports与exports的关系
  3. yolov5 mobile 剪枝
  4. VS2017增加数据库连接串
  5. python编程能干什么-Python编程一般可以用来做什么
  6. 设备管理器中的计算机有什么用,为什么计算机设备管理器中有两个图形卡?
  7. 10 | 递归:如何用三行代码找到“最终推荐人”?
  8. U-GAT-IT整体流程分析
  9. 前端基础-git(三):git和GitHub的一些基础操作
  10. 从Android发展看Meego
  11. NCBI引物设计-查找目的基因前后序列方法、序列比对
  12. 理解serialVersionUID是什么?有什么用?如何生成?
  13. 这才是打开风变编程的正确操作方式
  14. CSS 基础教程:CSS 选择器
  15. el-select 多选取值_Python实战—Lasso回归选取关键特征
  16. 【火电机组、风能、储能】高比例风电电力系统储能运行及配置分析(Matlab代码实现)
  17. 禅道开源版16.2,解决LDAP插件无法使用的问题
  18. vue引入echarts-liquidfill水滴图并批量动态加载
  19. 原生JS利用XMLHttpRequest实现Get和Post请求
  20. 找规律万能公式_万能公式:找规律什么的都弱爆了 | 死理性派小组 | 果壳网 科技有意思...

热门文章

  1. 统信UOS专业版软件包的安装与使用
  2. 2005年十大手机代表机型ZZ
  3. 小微企业如何实现数字化转型?应该从哪一步开始?
  4. 创新美学 自成风范 ,BMW 6系GT开启焕新旅程 悦享弘美新境
  5. 大麦回忆录-maizuo开发
  6. Swift 头像上传(2)http://blog.csdn.net/wei_chong_chong/article/details/52611110
  7. FigDraw 5. SCI 文章绘图之柱状图 (Barplot)
  8. java基础 - 网上书城
  9. 最好用的网易邮箱工具-网易邮箱助手_我是亲民_新浪博客
  10. VR沉浸式消防安全演练综合解决方案