题目出处:http://codeforces.com/problemset/problem/892/A
题目大意:有一些可乐(不一定装满),问能不能把所有可乐装进两个可乐瓶中
#include<iostream>
#include<queue>
#include<vector>
using namespace std;
int main(){
priority_queue< long long,vector<long long >,less<long long > >cap;
long long n; cin>>n;
long long sum=;
for(long long i=;i<n;i++){
long long rem; cin>>rem;
sum+=rem;
}
while(n--){
long long vol; cin>>vol;
cap.push(vol);
}
long long sumt = cap.top(); cap.pop();
sumt+=cap.top();
if(sum>sumt)cout<<"NO"<<endl;
else cout<<"YES"<<endl;
return ;
}
只需要对剩余的可乐加和与最大的容积的两个可乐瓶容积加和比较即可
关键在于如何获取两个最大容积
暴力可以遍历一次之后,获得最大的一个,然后去掉这个,再遍历一次,再获得第二大的,加和
我们使用最大优先队列priority_queue();头文件#include<queue>
关于优先队列可以问度娘,建议加上“STL”去百度