题目描述

给定dn组数据, 数据包括w, h, 给定a, b, c;
求一个子集, 子集里面所有的元素都满足A*(H-h) + B*(W-w) <= C
w为子集里面最小的w , h表示子集里面最小的h

样例

Sample Input
8
1 2 4
5 1
3 2
2 3
2 1
7 2
6 4
5 1
4 3
Sample Output
5

思路

  • 题目上的要求, 可以将题目转换用一个直角三角形,去圈点, 求圈得到的最多点的数量
  • 将数据按照h从大到小排序, 可以得到三角形的斜边是从上往下平移的,我们就按照这样一个顺序去遍历数组, 用队列保存满足要求的所有答案
  • 每组数据,保存ah+bw, 用于比较这组数据与当前确定的三角形是否满足要求, 将题目要求化简后合用得到 要求为a * h+b * w <= mh * a + mw * b + c
  • 用优先级队列, 队头保存最大的 a * h + b * w 这样每次就将更新了m后的不满足的答案弹出去
#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
#include <queue>using namespace std;const int N = 1010;struct node
{int w, h, s;bool operator <(const node &a) const {return s < a.s;}
};node t[N];
int a, b, c, n;bool cmp(node a, node b)
{return a.h > b.h;
}int main()
{while(~scanf("%d%d%d%d", &n, &a, &b, &c)){for(int i = 0; i < n; i++){scanf("%d%d", &t[i].h, &t[i].w);t[i].s = a * t[i].h + b * t[i].w;}sort(t, t + n, cmp);priority_queue<node> q;int ans = 0;for(int i = 0; i < n; i++){int mh = t[i].h;int mw = t[i].w;while(q.size())q.pop();for(int j = 0; j < n; j++){if(t[i].s > mh * a + mw * b + c)break;mh = min(mh, t[j].h);if(t[j].s <= mh * a + mw * b + c){ if(t[j].w >= mw)q.push(t[j]);while(q.size() && q.top().s > mh * a + mw * b + c)q.pop();}ans = max(ans, (int)q.size());}}printf("%d\n", ans);}return 0;
}

POJ - 2008 Moo University - Team Tryouts相关推荐

  1. POJ 2010 Moo University - Financial Aid(堆维护滑窗kth,二分)

    按照score排序,贪心,从左到右用堆维护并且记录前面的最小N/2个花费之和. 然后从右向左枚举中位数,维护N/2个数之和加上并判断是否满足条件.(stl的队列没有clear(),只能一个一个pop. ...

  2. POJ 2010 Moo University - Financial Aid【堆的应用】

    题意: 给出 n  个人,知道了每个人的成绩,和每个人想要的奖学金,要求从这些学生中找出 m (奇数)个人满足选出的人的成绩的中位数最大,且这些人总的奖学金需求要 小于等于总的奖学金数. 分析: 可以 ...

  3. POJ 2231 Moo Volume(递推、前缀和)

    题外话: POJ 2231 Moo Volume 题意: 解题过程: AC代码: 题外话: emm--第三套题好像综合了其他OJ的题目蛤,那么我就把题目分开了发了蛤蛤-- POJ 2231 Moo V ...

  4. bzoj 3372: [Usaco2004 Feb]Moo University -- Financial Aid 财政补助(set+贪心)

    3372: [Usaco2004 Feb]Moo University -- Financial Aid 财政补助 Time Limit: 10 Sec  Memory Limit: 128 MB S ...

  5. POJ2010 Moo University - Financial Aid

    题目链接:https://vjudge.net/problem/POJ-2010 题目大意: 有 \(C\) 头牛,每头牛有一个分数和需要资助的钱.现在要资助 \(N\) 头牛,总资助金额不能超过 \ ...

  6. POJ2010 Moo University - Financial Aid 优先队列

    题目大意是有一批学生上大学,但是需要一些奖学金才上得起,学校给的奖学金aid有限,并且学校的教室只能让N个学生来上学,N为奇数,所以学校希望在在所有参加入学考试的C名学生中选取N个学生,为了提高教学质 ...

  7. POJ前面的题目算法思路【转】

    1000 A+B Problem 送分题 49% 2005-5-7 1001 Exponentiation 高精度 85% 2005-5-7 1002 487-3279 n/a 90% 2005-5- ...

  8. POJ 超详细分类

    POJ 各题算法 1000    A+B Problem            送分题     49%    2005-5-7 1001    Exponentiation         高精度   ...

  9. POJ的题目分类(两个版本)

    版本一: 简单题 1000A+B Problem 1001Exponentiation 1003 Hangover 1004 Financial Management 1005 I Think I N ...

最新文章

  1. 添加议题模块html,WordPress 技巧:为评论模块增加更多 HTML 标签支持
  2. MDaemon 10.1.2 通过Webclient发邮件时,提示“发邮件时发生错误
  3. VS2017调用MySQL 8.0(附上C++程序)
  4. Mac中IDEA在配置tomcat时一直出现404的错误
  5. CodeForces - 888G Xor-MST(贪心+字典树+最小生成树)
  6. 基于python的图书管理系统测试步骤_Django admin实现图书管理系统菜鸟级教程完整实例...
  7. python游戏开发库_Python库之游戏开发及虚拟现实
  8. mybatis开启字段自动映射为java驼峰命名规则
  9. [转]Python中的eval()、exec()及其相关函数
  10. RGB转换为NV12的代码
  11. Java + OpenCV 实现图片人脸检测
  12. 云计算基础(纯理论)
  13. 5G学习之路——认识CU、DU
  14. 纵横算法之三:算法到底考什么
  15. 【luogu P3403】跳楼机(图论)
  16. OSChina 周四乱弹 ——年终奖300,前提是过年加班,干不干?
  17. MySQL免安装版配置部署详细教程
  18. oracle 10092,Oracle诊断事件列表
  19. 高通平台如何使用QPST抓DUMP
  20. Bootloader之uBoot简介

热门文章

  1. 刘强东的代码水平到底有多牛?
  2. java编程思想初始化引用,JAVA编程思想--第5章 初始化与清理
  3. 【Matlab】删除cell中所有的空白cell
  4. db db2_monitorTool IBM Rational Performace Tester
  5. 关于const的拙见
  6. 商城系统APP如何开发 都有哪些步骤
  7. docker简介及使用国内镜像源安装docker
  8. 2018.8.18日,直播笔记
  9. 微商靠什么引流?微商有哪些平台可以精准引流?
  10. 天蓝色在ps中的色值_用天蓝色构建混合云