SZU2
区间暴力,枚举区间。交换选定区间最小值和剩余区间最大值k次。
其实等同于将剩余区间最大k个加到选定区间里,然后排序
#include <iostream>
#include <string>
#include <cstring>
#include <cstdlib>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <stack>
#include <queue>
#include <cctype>
#include <vector>
#include <iterator>
#include <set>
#include <map>
#include <sstream>
using namespace std; #define mem(a,b) memset(a,b,sizeof(a))
#define pf printf
#define sf scanf
#define spf sprintf
#define pb push_back
#define debug printf("!\n")
#define INF 10000
#define MAXN 5010
#define MAX(a,b) a>b?a:b
#define blank pf("\n")
#define LL long long
#define ALL(x) x.begin(),x.end()
#define INS(x) inserter(x,x.begin())
#define pqueue priority_queue int a[];
int n,k; int main()
{
int i,j,m;
while(sf("%d%d",&n,&k)==)
{
for(i =;i<n;i++)
sf("%d",&a[i]); int mx=-; for(i =;i<n;i++)
{
for(j =i;j<n;j++)
{
vector<int> p,q;
for(m=;m<n;m++)
{
if(m<i||m>j) p.pb(a[m]);//p剩余区间
else q.pb(a[m]);//q选定区间
}
sort(p.rbegin(),p.rend());//rbegin反向迭代器
for(m=;m<k&&m<p.size();m++)
q.pb(p[m]);
sort(q.rbegin(),q.rend());
int sum=;
for(m=;m<=j-i;m++) sum+=q[m];
if(sum>mx) mx=sum;
}
} pf("%d\n",mx);
}
}
这题其实是二分法。需要买最多的车,判断能不能买k辆车的话,一定是钱最多的k个人,买最便宜的k辆车,然后二分查找找出最大k
第二条件即花钱最少其实可以算出来,最关键还是k的大小
#include <iostream>
#include <string>
#include <cstring>
#include <cstdlib>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <stack>
#include <queue>
#include <cctype>
#include <vector>
#include <iterator>
#include <set>
#include <map>
#include <sstream>
using namespace std; #define mem(a,b) memset(a,b,sizeof(a))
#define pf printf
#define sf scanf
#define spf sprintf
#define pb push_back
#define debug printf("!\n")
#define INF 10000
#define MAXN 5010
#define MAX(a,b) a>b?a:b
#define blank pf("\n")
#define LL long long
#define ALL(x) x.begin(),x.end()
#define INS(x) inserter(x,x.begin())
#define pqueue priority_queue int b[],p[];
int n,m,a; bool ok(int k)
{
int aa = a;
int d=n-k;
for(int i=;i<k;i++)
{
if(b[i+d]<p[i])
aa-=(p[i]-b[i+d]);
if(aa<) return false;
}
return true;
} int main()
{
int i,j;
while(sf("%d%d%d",&n,&m,&a)==)
{
for(i=;i<n;i++) sf("%d",&b[i]);
for(i=;i<m;i++) sf("%d",&p[i]);
sort(b,b+n);
sort(p,p+m);
int l=,r=min(n,m),mid;
while(l<=r)
{
mid = (l+r)>>;
if(ok(mid)) l=mid+;
else r=mid-;
}
int s =;
for(i=;i<l-;i++)
s+=p[i];
pf("%d %d\n",l-,s-a);
}
}
SZU2的更多相关文章
- Qt开发初步,循序渐进,preRequest for 蓝图逆袭
1,使用Qt面向对象类继承创建第一个窗口主部件,使用setMinimumSize(),setMaximumSize()配置主部件窗口是否能够resize;
- 数据结构——表(list)
#include <iostream> #include <list> using namespace std; 标准类的存储方式为双向循环链表 list类 class lis ...
- [Android系列—] 1. Android 开发环境搭建与Hello World
前言 開始之前先熟悉几个名词: SDK -- Software Development Kit, 软件开发工具包.这个词并不陌生, JDK,就是Jave Development Kit,相同对于And ...
随机推荐
- Ajax请求的一个重要属性contentType
比如 contentType : 'application/json;charset=UTF-8', 或者 contentType : 'text/html;charset=UTF-8', 如果不加此 ...
- Zabbix监控详解
Zabbix是什么 Zabbix 是由Alexei Vladishev创建,目前由Zabbix SIA在持续开发和支持. Zabbix 是一个企业级的分布式开源监控方案. Zabbix是一款能够监控各 ...
- python学习笔记之使用threading模块实现多线程(转)
综述 Python这门解释性语言也有专门的线程模型,Python虚拟机使用GIL(Global Interpreter Lock,全局解释器锁)来互斥线程对共享资源的访问,但暂时无法利用多处理器的优势 ...
- handlersocket优缺点
HandlerSocket的优势和特点: 1) 支持多种查询模式 HandlerSocket目前支持索引查询(主键索引和非主键的普通索引均可),索引范围扫描,LIMIT子句,也即支持增 ...
- 自己动手——快速搭建Android应用服务器
1.服务器搭建方案选择 我们用:MySQL + Java Web + Tomcat + Volley 来实现我们的服务器. 其中:①MySQL是开源的数据库软件:②Java Web是遵循Java语言风 ...
- js 删除数组的某一项或者几项的方法
1.arr.splice() splice(index,len,[item]) 注释:该方法会改变原始数组. splice有3个参数,它也可以用来替换/删除/添加数组内某一个或者几个值 inde ...
- RHCE 入门 第一篇
随着工作压力越来越大,我们越需要技术储备. 从2017年10月14日开始参加RHCE培训
- Python生成pyc文件
Python生成pyc文件 pyc文件是py文件编译后生成的字节码文件(byte code).pyc文件经过python解释器最终会生成机器码运行.所以pyc文件是可以跨平台部署的,类似Java的.c ...
- springboot入门记
在idea中直接新建: 选择web: 在idea中启动“项目名称”Application中的main即可: 或者在项目目录下运行:mvn spring-boot:run: 或者: mvn instal ...
- Mac新手问题
[现象:]MAC下checkout代码时,报svn:E170013-unable to connect to a repository at url xxx, svn:E1700113: unable ...