n个人,已知每个人体重,独木舟承重固定,每只独木舟最多坐两个人,可以坐一个人或者两个人。显然要求总重量不超过独木舟承重,假设每个人体重也不超过独木舟承重,问最少需要几只独木舟?
输入
第一行包含两个正整数n (0<n<=10000)和m (0<m<=2000000000),表示人数和独木舟的承重。 接下来n行,每行一个正整数,表示每个人的体重。体重不超过1000000000,并且每个人的体重不超过m。
输出
一行一个整数表示最少需要的独木舟数。
输入示例
3 6 1 2 3
输出示例
2
贪心思想:就是判断最重的那个人能不能和最轻的那个人同一条船,如果不能,则最重的人一定是一个人一条船
1 #include<iostream> 2 #include<algorithm> 3 using namespace std; 4 typedef long long ll; 5 6 ll a[10005]; 7 int main(){ 8 ll n, m; 9 cin>>n>>m; 10 for(int i=0; i<n; i++){ 11 cin>>a[i]; 12 } 13 sort(a, a+n); 14 ll k=0; 15 for(int i=n-1; i>=0; i--){ 16 int s=0; 17 if(a[i]==0){ 18 break; //如果搜到了a[i]=0的点,说明分配完毕,结束循环 19 } 20 while(a[s]==0){ 21 s++; 22 } 23 if((a[s]+a[i])>m){ //具体实现细节,从最重的人开始枚举,如果最轻的人能和最重的人坐一条船,就把最轻的人弄出去,设a[i]=0 24 a[i]=0; 25 k++; 26 }else{ 27 a[i]=a[s]=0; 28 k++; 29 } 30 } 31 cout << k << endl; 32 return 0; 33 }