传送门

题目描述

给你n1个一类物品和n2个二类物品,给你每件物品的重要程度和重量,每类物品必须选一件,如果选了某个物品,那么重要程度大于已选物品的同类物品必须要选上,要求选中物品的总重量不超过给定的重量,求最大重要程度之和

分析

思路比较简单了,写起来也不难
首先比较容易想的是,每类物品肯定是从重要程度最高到重要程度最低依次拿,这样我们就可以枚举第一类物品选到第i个,然后去二分第二类物品能选择的最大数量,然后去更新答案即可
提前用前缀和优化预处理一下即可

代码

#include <iostream>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <queue>
#include <cstring>
#define debug(x) cout<<#x<<":"<<x<<endl;
#define _CRT_SECURE_NO_WARNINGS
#pragma GCC optimize("Ofast","unroll-loops","omit-frame-pointer","inline")
#pragma GCC option("arch=native","tune=native","no-zero-upper")
#pragma GCC target("avx2")
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> PII;
const int INF = 0x3f3f3f3f;
const int N = 1e5 + 10;
int n1,n2,m;
struct Node{int d,w;
}a[N],b[N];
ll da[N],db[N];
ll wa[N],wb[N];bool cmp(Node A,Node B){if(A.w != B.w)return A.w > B.w;return A.d < B.d;
}int main(){scanf("%d%d%d",&n1,&n2,&m);for(int i = 1;i <= n1;i++) scanf("%d%d",&a[i].w,&a[i].d);for(int i = 1;i <= n2;i++) scanf("%d%d",&b[i].w,&b[i].d);sort(a + 1,a + 1 + n1,cmp);sort(b + 1,b + 1 + n2,cmp);for(int i = 1;i <= n1;i++) {da[i] = da[i - 1] + a[i].d;wa[i] = wa[i - 1] + a[i].w;}for(int i = 1;i <= n2;i++) {db[i] = db[i - 1] + b[i].d;wb[i] = wb[i - 1] + b[i].w;}ll ans = 0;for(int i = 1;i <= n1;i++){int l = 1,r = n2;while(r  - l > 1){int mid = l + r >> 1;if(da[i] + db[mid] <= m) l = mid;else r = mid - 1;}if(da[i] + db[r] <= m){ans = max(wa[i] + wb[r],ans);}if(da[i] + db[l] <= m){ans = max(wa[i] + wb[l],ans);}}printf("%lld\n",ans);return 0;
}/**
*  ┏┓   ┏┓+ +
* ┏┛┻━━━┛┻┓ + +
* ┃       ┃
* ┃   ━   ┃ ++ + + +
*  ████━████+
*  ◥██◤ ◥██◤ +
* ┃   ┻   ┃
* ┃       ┃ + +
* ┗━┓   ┏━┛
*   ┃   ┃ + + + +Code is far away from  
*   ┃   ┃ + bug with the animal protecting
*   ┃    ┗━━━┓ 神兽保佑,代码无bug 
*   ┃        ┣┓
*    ┃        ┏┛
*     ┗┓┓┏━┳┓┏┛ + + + +
*    ┃┫┫ ┃┫┫
*    ┗┻┛ ┗┻┛+ + + +
*/

Codeforces 774B:Significant Cups 前缀和 + 二分相关推荐

  1. poj3061尺取法/前缀和 二分(java)

    今天遇到这题因为以前没见到过,当时就是想着应该有着一个很简单的方法可以过但是奈何就是没思路.后来看了别人思路写了下来.学习了尺取法 poj3061 题目介绍: Description A sequen ...

  2. [Leedcode][JAVA][第209题][长度最小的子数组][滑动窗口][前缀和][二分查找][双指针]

    [问题描述][中等] 给定一个含有 n 个正整数的数组和一个正整数 s ,找出该数组中满足其和 ≥ s 的长度最小的连续子数组,并返回其长度.如果不存在符合条件的连续子数组,返回 0.示例: 输入: ...

  3. LeetCode 528. 按权重随机选择(前缀和+二分查找)

    文章目录 1. 题目 2. 解题 1. 题目 给定一个正整数数组 w ,其中 w[i] 代表下标 i 的权重(下标从 0 开始),请写一个函数 pickIndex ,它可以随机地获取下标 i,选取下标 ...

  4. LeetCode 497. 非重叠矩形中的随机点(前缀和+二分查找)

    文章目录 1. 题目 2. 解题 1. 题目 给定一个非重叠轴对齐矩形的列表 rects,写一个函数 pick 随机均匀地选取矩形覆盖的空间中的整数点. 提示: 整数点是具有整数坐标的点. 矩形周边上 ...

  5. Glider(前缀和+二分)

    题目链接:Glider Gym-101911B 解题分析:下落的高度一定,是h.在没有气流的地方每秒下落1:所以可以转化为经过无气流地带的时间总长为h. 那么很显然从一个有气流地带的开始,选择下落,那 ...

  6. 209 长度最小的子数组(前缀和+二分查找、滑动窗口)

    1. 问题描述: 给定一个含有 n 个正整数的数组和一个正整数 s ,找出该数组中满足其和 ≥ s 的长度最小的连续子数组,并返回其长度.如果不存在符合条件的子数组,返回 0. 示例: 输入:s = ...

  7. HDU 6406 Taotao Picks Apples(前缀和+二分)

    HDU 6406 Taotao Picks Apples(前缀和+二分) Time Limit: 2000/2000 MS (Java/Others) Memory Limit: 131072/131 ...

  8. CodeForces - 948C(前缀和 + 二分)

    链接:CodeForces - 948C 题意:N天,每天生产一堆雪体积 V[i] ,每天每堆雪融化 T[i],问每天融化了多少雪. 题解:对 T 求前缀和,求每一堆雪能熬过多少天,再记录一下多余的就 ...

  9. Codeforces Round #509 D - Glider(枚举二分前缀和)

    题意: 给出滑翔机的高度h 以及有n段上升气流区间,滑翔机在非上升气流区间会以每前进一个单位 高度就下降一个单位的 速度坠落 ,而在有上升气流的区间,滑翔机将持续前进,并不会下落,问在一维坐标上的哪个 ...

最新文章

  1. 在github上创建自己的第一个项目仓库实录
  2. JETSON NANO 查看 CUDA 版本:NVCC -V 报错:BASH: NVCC: 未找到命令
  3. WordPress按钮秒支付插件发布,支持微信支付,支付宝,银联,京东,苏宁,易宝支付...
  4. 台式电脑如何设置开机密码_网络安全小黑板|如何设置开机密码
  5. c语言编写程序确定平年闰年,C语言平年闰年问题
  6. kong 网关日志格式修改
  7. 电机驱动板连线_伺服驱动器的工作原理和内部结构是什么?
  8. SAP Commerce Cloud Build Manifest Components
  9. Andorid之Log图文详解(Log.v,Log.d,Log.i,Log.w,Log.e)的用法总结
  10. C 多线程的互斥锁应用RAII机制
  11. 如何学习微信公众平台的开发?
  12. 关于IP SLA及与EEM联动的探讨
  13. 解决源码安装手册找不到问题
  14. LQ-1600K打印机色带传动故障分析
  15. sql如何行转列,列转行
  16. TUIO之TuioDemo
  17. Latex——插入罗马字母或更改字体为公式体
  18. win10 cortana搜索没有任何结果,只是一片空白的解决方案
  19. Xiaojie雷达之路---毫米波雷达基础知识---距离估计
  20. 软件工程--团队答辩

热门文章

  1. mysql查询语句添加自增长序号
  2. 帝国CMS7.5默认首页模板太难看,如何修改首页模板样式
  3. sqlserver 累计数量_MSSQL 基础之逐行累计
  4. 洛克菲勒资本管理公司成立洛克菲勒资产管理国际公司,将在伦敦开设第一家国际办事处
  5. 海贼王热血航线服务器正在维护,航海王热血航线进不去怎么办
  6. ubuntu16.04没有声音
  7. winform遍历bartender_C#/Winform使用Bartender动态打印图片
  8. VS2022-scanf返回值忽略报错解决方案
  9. C/C++之fopen
  10. 升级SpatialPyramidPooling至tensorflow-gpu-2.3的过程,附下载地址