战争
来源:互联网 发布:标签系统数据库设计 编辑:程序博客网 时间:2024/05/17 03:29
问题描述 Problem Description
高老大要打团战了。他要召集
输入描述 Input Description
输入第一行为三个正整数
后接
输出描述 Output Description
输出一行一个整数,代表这
输入样例 Sample Input
3 5 70
30 25
50 21
20 20
5 18
35 30
输出样例 Sample Output
35
提示 Hint
选第
数据范围 Data Size
对于
对于
分析 I Think
先把每个人按战斗力值从小到大排序,记
代码 Code
#include <cstdio>#include <cstring>#include <algorithm>#include <queue>using namespace std;const int Size = 100007;const int inf = 0x3f3f3f3f;struct peo{int v,w;bool operator < (const peo &h)const{return v<h.v;}}a[Size];int n,m,t;int f[Size];int g[Size];priority_queue<int >que;int main(){ scanf("%d%d%d",&t,&n,&m); for(int i=1;i<=n;++i) scanf("%d%d",&a[i].v,&a[i].w); sort(a+1,a+n+1); int k = 0; for(int i=1;i<=(t>>1);++i){ que.push(a[i].w); f[i] = inf; k += a[i].w; } f[(t>>1)+1] = k; for(int i=(t>>1)+2;i<=n;++i) if(que.top() > a[i-1].w){ f[i] = f[i-1]-que.top()+a[i-1].w; que.pop(); que.push(a[i-1].w); } else f[i] = f[i-1]; while(!que.empty()) que.pop(); k = 0; for(int i=n;i>=n-(t>>1)+1;--i){ que.push(a[i].w); g[i] = inf; k += a[i].w; } g[n-(t>>1)] = k; for(int i=n-(t>>1)-1;i>=1;--i) if(que.top() > a[i+1].w){ g[i] = g[i+1]-que.top()+a[i+1].w; que.pop(); que.push(a[i+1].w); } else g[i] = g[i+1]; for(int i=n;i>=1;--i) if(f[i]+g[i]+a[i].w <= m){ printf("%d",a[i].v); return 0; } puts("-1"); return 0;}
0 0
- 战争
- 战争
- 战争
- 战争
- 战争研究
- 战争艺术
- 关于战争
- 产业战争
- 货币战争
- 货币战争
- 货币战争
- 货币战争
- 贸易战争
- 《战争风云》
- 中国近代战争
- 地图战争
- 平台战争
- 货币战争
- Apache common包应用集合
- colojure语言基础入门
- android中的广播Broadcast
- js中的hasOwnProperty和isPrototypeOf方法使用实例
- Java类型擦除
- 战争
- AppCompat是什么?
- shiro入门
- 模板方法模式
- CI框架扩展路由钩子hooks改变自定义控制器和方法
- ab输出参数详解
- APP 接口之 oracle分页查询数据 上拉查看之前的,下拉刷新数据接口
- 类加载器和类加载机制
- JS打开新窗口(window.open)