题目链接
题意:给你n个物品的大小,和k个盒子,每个盒子最多只能放2个物品。
物品的大小按照升序给出,问你最小的盒子是多大
解答:二分盒子的大小S,然后判断下体积是S时需要的盒子数量是不是小于K的。这个地方要贪心,正确的方法是把体积大的和体积小的放在一起
#define CF
#ifndef CF
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<string>
#include<iostream>
#include<set>
#include<vector>
#else
#include<bits/stdc++.h>
#endif // CF
using namespace std;
#define LL long long
#define pb push_back
#define X first
#define Y second
#define cl(a,b) memset(a,b,sizeof(a))
typedef pair<long long ,long long > P;
const int maxn=1000005;
const LL inf=1LL<<60;
const LL mod=1e9+7;
int a[maxn];
int n,k;
bool check(int s){
int cnt=0;
for(int i=0;i<n;i++){
if(a[i]>s)return false;
}
int i=0,j=n-1;
while(i<=j){
if(a[i]+a[j]<=s){
i++;j--;
cnt++;
}
else {
j--;cnt++;
}
}
return cnt<=k;
}
int main(){
cin>>n>>k;
for(int i=0;i<n;i++){
cin>>a[i];
}
int l=0,r=10000000;
while(l<=r){
int mid=(l+r)>>1;
if(check(mid))r=mid-1;
else l=mid+1;
}
printf("%d\n",l);
return 0;
}