基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题
n个人,已知每个人体重。独木舟承重固定,每只独木舟最多坐两个人,可以坐一个人或者两个人。显然要求总重量不超过独木舟承重,假设每个人体重也不超过独木舟承重,问最少需要几只独木舟?
Input
第一行包含两个正整数n (0<n<=10000)和m (0<m<=2000000000),表示人数和独木舟的承重。 接下来n行,每行一个正整数,表示每个人的体重。体重不超过1000000000,并且每个人的体重不超过m。
Output
一行一个整数表示最少需要的独木舟数。
Input示例
3 6 1 2 3
Output示例
2
题解:简单贪心,排序之后从第N个找第一个,两者小于称重就同时往里找,大于称重说明第N个必须自己走,那么就找第N-1个和第一个,依次下去。
AC代码:
1 #include<iostream> 2 #include<algorithm> 3 using namespace std; 4 const int maxn = 10005; 5 long long a[maxn]; 6 int n; 7 long long k; 8 int main() 9 { 10 cin>>n>>k; 11 for(int i=1;i<=n;i++) 12 { 13 cin>>a[i]; 14 } 15 sort(a+1,a+1+n); 16 int t = 1; 17 int h = n; 18 int sum = 0; 19 while(t<=h) 20 { 21 if(a[h]+a[t]<=k) 22 { 23 sum++; 24 h--; 25 t++; 26 } 27 else 28 { 29 sum++; 30 h--; 31 } 32 } 33 cout<<sum<<endl; 34 return 0; 35 }
时间: 2024-11-06 11:16:17