大学招n(n为奇数)个牛 招第i个牛需要ai块钱 第i个牛高考si分

输入招的牛数n 总的牛数c 总的钱数f

以及ai si

问用这些钱招的n个牛高考分数的中位数最大是多少

如果钱不够输出-1

这题结果只与中间那个牛的分数有关

设k=(n+1)/2

则可以得到分比k低的招了(n-1)/2个

比k高的也招了(n-1)/2个

用dpL[i]表示在[1,i]中招(n-1)/2个的最小花费

用dpR[i]表示在[i,c]中招(n-1)/2个的最小花费

排序 枚举k

如果满足dpL[i] + dpR[i] + ai <= F就可行

在可行情况下找最大的中位数就可以了

#include<cstdio>
#include<algorithm>
#include<cstring>
#include<queue>
using namespace std;
const int N=;
int dpl[N],dpr[N];
priority_queue<int> Q;
struct Data
{
int s,f;
}cow[N];
bool comp(Data a,Data b)
{
if(a.s!=b.s)
return a.s>b.s;
else
return a.f<b.f;
}
int main()
{
int n,c,f;
while(scanf("%d%d%d",&n,&c,&f)!=EOF)
{
int nu=(n-)/;
for(int i=;i<=c;i++)
scanf("%d%d",&cow[i].s,&cow[i].f);
sort(cow+,cow+c+,comp);
while(!Q.empty())
Q.pop();
int sum=;
for(int i=;i<=nu;i++)
Q.push(cow[i].f),sum+=cow[i].f;
dpl[nu]=sum;
for(int i=nu+;i<=c;i++)
{
if(cow[i].f>=Q.top())
dpl[i]=sum;
else
{
sum=sum-Q.top()+cow[i].f;
Q.pop();
Q.push(cow[i].f);
dpl[i]=sum;
}
}
sum=;
while(!Q.empty())
Q.pop();
for(int i=c;i>=c-nu+;i--)
Q.push(cow[i].f),sum+=cow[i].f;
dpr[c-nu+]=sum;
for(int i=c-nu;i>=;i--)
{
if(cow[i].f>=Q.top())
dpr[i]=sum;
else
{
sum=sum-Q.top()+cow[i].f;
Q.pop();
Q.push(cow[i].f);
dpr[i]=sum;
}
}
bool flag=false;
for(int i=nu+;i<=c-nu;i++)
{
if(cow[i].f+dpl[i-]+dpr[i+]<=f)
{
flag=true;
printf("%d\n",cow[i].s);
break;
}
}
if(!flag)
printf("-1\n");
}
return ;
}

poj2010的更多相关文章

  1. POJ2010 Moo University - Financial Aid(二分法)

    题目地址 分析:如果用二分法,关键是score和aid分开排序,score排序是为了充分利用中位数的性质,这样就可以确定m左右必须各选N/2个,到这之后有人是用dp求最优解,可以再次按照aid排序一次 ...

  2. Moo University - Financial Aid [POJ2010] [堆]

    题意: 在C头牛里选N头牛,每头牛需要花掉一定经费ai才能得到一定得bi分,在不超过经费F的情况下,使得N头牛的得分中位数最大.(1 <= N <= 19,999,奇数) (N <= ...

  3. Poj2010 Moo University - Financial Aid

    题意的话,就看其他人的吧 概括:二分中位数 大体上便是二分一个中位数,带入检验,若分数比他小的有\(\lfloor n/2 \rfloor\)个,分数比他的大的也有这么多,而且贪心的买,花费小于预算. ...

  4. poj2010 Moo University - Financial Aid 优先队列

    Description Bessie noted that although humans have many universities they can attend, cows have none ...

  5. poj3月题解

    poj2110 二分答案+bfs判定 poj2112 二分答案+最大流判定(二分答案真乃USACO亲儿子) poj1986 裸的LCA,值得注意的是,树中任意两点的距离可以等于这两点到根的距离减去2* ...

  6. OJ题目分类

    POJ题目分类 | POJ题目分类 | HDU题目分类 | ZOJ题目分类 | SOJ题目分类 | HOJ题目分类 | FOJ题目分类 | 模拟题: POJ1006 POJ1008 POJ1013 P ...

  7. POJ_2010 Moo University - Financial Aid 【堆预处理】

    一.题面 POJ2010 二.分析 堆预处理 首先可以考虑吧随便取一个点,判断两侧的最小的总费用是多少,然后相加判断是否满足条件.如果直接判断会超时,所以需要用大根堆预处理一下.先看从分数最小的往最大 ...

  8. 【POJ - 2010】Moo University - Financial Aid(优先队列)

    Moo University - Financial Aid Descriptions 奶牛大学:奶大招生,从C头奶牛中招收N(N为奇数)头.它们分别得分score_i,需要资助学费aid_i.希望新 ...

随机推荐

  1. Java多线程(Java总结篇)

    Java总结篇:Java多线程 多线程作为Java中很重要的一个知识点,在此还是有必要总结一下的. 一.线程的生命周期及五种基本状态 关于Java中线程的生命周期,首先看一下下面这张较为经典的图: 上 ...

  2. Ubuntu输入su命令提示认证失败的解决办法

    Ubuntu安装后,root用户默认是被锁定了的,不允许登录,也不允许执行"su命令到root".对于桌面用户而言,这样可以提高安全性.但对于服务器可以设置成允许"su命 ...

  3. loadrunder脚本篇——执行操作系统命令

    思路: 用loadrunner system()函数 函数原型: int system( const char *string ); 示例一:在指定目录下创建指定文件 Action() { char ...

  4. OpenCV图片拼接的两种方法

    https://my.oschina.net/xiaot99/blog/226589 一.原图 1.jpg                                        2.jpg   ...

  5. weblogic启动错误 Unrecognized option: -jrockit

    高版本jdk启动低版本weblogic有时会报Unrecognized option: -jrockit参数错误 这纯粹是版本问题,版本更新更换参数名称的缘故 解决方法: “%WL_HOME%\com ...

  6. CentOS 7卸载mariadb安装mysql

    CentOS 7已经将默认集成mariadb而不是mysql,这对于多数还是依赖于mysql的应用来说,需要手动的进行更新. 可能会遇到这样错误,换成MySQL就好了. error 2002 (hy0 ...

  7. CoreData的基本操作

     Managed Object Model(被管理对象模型): –数据库的轮廓,或者结构.包含了各个实体的定义信息      Persistent Store Coordinator (持久性数据协调 ...

  8. 在一个N个整数数组里面,有多个奇数和偶数,设计一个排序算法,令所有的奇数都在左边。

    //在一个N个整数数组里面,有多个奇数和偶数,设计一个排序算法,令所有的奇数都在左边. // 例如: 当输入a = {8,4,1,6,7,4,9,6,4}, // a = {1,7,9,8,4,6,4 ...

  9. TortoiseSVN教程级别指南

    安装说明 开发人员强烈建议使用IDE中的SVN插件更加智能与人性化. 首先安装SVN客户端,windows一般选择乌龟客户端https://tortoisesvn.net/downloads.html ...

  10. 【P2422】良好的感觉(单调栈优化DP//奇怪的暴力)

    话说正解是单调栈优化DP,然而貌似根据某种玄学的推算,这个题暴力出解貌似也是可以的.首先,我们枚举所有的点作为最小点,然后横向展开,遇到更小的就停止...然后再操作一下,看上去时间O(N^2),然而由 ...