n個人,已知每個人體重。獨木舟承重固定,每隻獨木舟最多坐兩個人,可以坐一個人或者兩個人。顯然要求總重量不超過獨木舟承重,假設每個人體重也不超過獨木舟承重,問最少需要幾隻獨木舟?
Input
第一行包含兩個正整數n (0 接下來n行,每行一個正整數,表示每個人的體重。體重不超過1000000000,並且每個人的體重不超過m。
Output
一行一個整數表示最少需要的獨木舟數。
Sample Input
3 6 1 2 3
Sample Output
2
小白看到這樣的題沒仔細讀,上去就寫,寫完就交,wa了兩次,發現有個條件沒有讀到,真是有點遺憾,題中有要求每艘船隻能最多裝兩個人,那麼可以對所有人的體重sort一次,接下來再進行一一配對;注意條件聲明;話不多說,直接上代碼:
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
#define ll long long
ll r[100050];
int main(){
ll a,b,c,i,j,k;
memset(r,0,sizeof(r));
scanf("%lld%lld",&a,&b);
c=0;
for(i=0;i<a;i++){
scanf("%lld",&r[i]);
}
sort(r,r+a);//體重重排;
j=b;
i=0;k=a-1;
while(i<=k){
if(j>=r[k]){
j-=r[k];
k--;
if(j>r[i]){
j-=r[i];
i++;
c++;
j=b;//判斷能否裝一個胖子一個瘦子
}
else{
c++;
j=b;//不能的話就進行下一組組合;
}
}
}
printf("%lld\n",c);
return 0;
}