51NOD 1432 独木舟

基准时间限制: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 }

 

posted @ 2017-12-10 14:53  sortmin  阅读(284)  评论(0编辑  收藏  举报