天天看點

51NOD 1432 獨木舟

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 }