POJ - 2008 Moo University - Team Tryouts
题目描述
给定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相关推荐
- POJ 2010 Moo University - Financial Aid(堆维护滑窗kth,二分)
按照score排序,贪心,从左到右用堆维护并且记录前面的最小N/2个花费之和. 然后从右向左枚举中位数,维护N/2个数之和加上并判断是否满足条件.(stl的队列没有clear(),只能一个一个pop. ...
- POJ 2010 Moo University - Financial Aid【堆的应用】
题意: 给出 n 个人,知道了每个人的成绩,和每个人想要的奖学金,要求从这些学生中找出 m (奇数)个人满足选出的人的成绩的中位数最大,且这些人总的奖学金需求要 小于等于总的奖学金数. 分析: 可以 ...
- POJ 2231 Moo Volume(递推、前缀和)
题外话: POJ 2231 Moo Volume 题意: 解题过程: AC代码: 题外话: emm--第三套题好像综合了其他OJ的题目蛤,那么我就把题目分开了发了蛤蛤-- POJ 2231 Moo V ...
- 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 ...
- POJ2010 Moo University - Financial Aid
题目链接:https://vjudge.net/problem/POJ-2010 题目大意: 有 \(C\) 头牛,每头牛有一个分数和需要资助的钱.现在要资助 \(N\) 头牛,总资助金额不能超过 \ ...
- POJ2010 Moo University - Financial Aid 优先队列
题目大意是有一批学生上大学,但是需要一些奖学金才上得起,学校给的奖学金aid有限,并且学校的教室只能让N个学生来上学,N为奇数,所以学校希望在在所有参加入学考试的C名学生中选取N个学生,为了提高教学质 ...
- POJ前面的题目算法思路【转】
1000 A+B Problem 送分题 49% 2005-5-7 1001 Exponentiation 高精度 85% 2005-5-7 1002 487-3279 n/a 90% 2005-5- ...
- POJ 超详细分类
POJ 各题算法 1000 A+B Problem 送分题 49% 2005-5-7 1001 Exponentiation 高精度 ...
- POJ的题目分类(两个版本)
版本一: 简单题 1000A+B Problem 1001Exponentiation 1003 Hangover 1004 Financial Management 1005 I Think I N ...
最新文章
- 添加议题模块html,WordPress 技巧:为评论模块增加更多 HTML 标签支持
- MDaemon 10.1.2 通过Webclient发邮件时,提示“发邮件时发生错误
- VS2017调用MySQL 8.0(附上C++程序)
- Mac中IDEA在配置tomcat时一直出现404的错误
- CodeForces - 888G Xor-MST(贪心+字典树+最小生成树)
- 基于python的图书管理系统测试步骤_Django admin实现图书管理系统菜鸟级教程完整实例...
- python游戏开发库_Python库之游戏开发及虚拟现实
- mybatis开启字段自动映射为java驼峰命名规则
- [转]Python中的eval()、exec()及其相关函数
- RGB转换为NV12的代码
- Java + OpenCV 实现图片人脸检测
- 云计算基础(纯理论)
- 5G学习之路——认识CU、DU
- 纵横算法之三:算法到底考什么
- 【luogu P3403】跳楼机(图论)
- OSChina 周四乱弹 ——年终奖300,前提是过年加班,干不干?
- MySQL免安装版配置部署详细教程
- oracle 10092,Oracle诊断事件列表
- 高通平台如何使用QPST抓DUMP
- Bootloader之uBoot简介