csu1775 悲催的移寢

對於csuxushu來說,能夠在CSU(California State University)上學是他一生的榮幸,而換校區搬寢室則是他最大的不幸。順利通過省賽選拔,開心的csuxushu現在需要着手準備搬家事宜。
對於好學的csuxushu來說,唯一頭疼的就是書籍的搬運了,因爲他的書實在是太多了。爲了防止書籍在運輸過程中受損,他打算定製特製的儲物保護箱。爲了簡單起見,我們假設他所有的書都是一樣規格。由於是批量定製,這些儲物箱都有相同的長度L,寬度和厚度都是一本書的寬度和厚度。csuxushu有一個特殊的要求,那就是每個儲物箱最多隻能放兩本書。當然,他需要運走所有的N本書,並且每一個儲物箱裏書的總長度不能超過L。
儘管校隊隊員給了csuxushu許多獎勵,csuxushu還是想定儘可能少的儲物箱,以求節約經費,然而面對這麼困難的問題他顯然是一臉懵逼,這時候他想到了你——全CSU最厲害的程序員來幫助他解決這個問題。

Input

第一行一個整數T,代表有T組數據,之後一個空行並且接下來每兩組數據之間有一個空行。
每組數據第一行,爲1個整數n (1 ≤ n ≤ 10^5),代表有n本書。第二行,爲1個整數L ,1≤l ≤ 10000 ,爲特製儲物箱長度。接下來n行,分別爲每本書的長度li,li≤l。

Output

每組數據輸出一行,即csuxushu至少需要定多少儲物箱。相鄰兩組數據之間輸出一個空行以示區分。

Sample Input
1

10
80
70
15
30
35
10
80
20
35
10
30
Sample Output
6
Hint

解題思路:

貪心,就是每一個箱子裏面儘量裝更多的書,最大的和最小的搭配,如果裝下了最大的書,但是沒有辦法一起裝下最小的書,那倒數第二小的書也不行,思路就是這樣,但是要注意輸出,由空行的


代碼:

#include<iostream>
#include<algorithm>
using namespace std;

int list[100000];

int main()
{
    int t, n, l;
    int low, high;
    int sum;
    cin >> t;
    for (int ii = 0; ii < t;ii++)
    {
        cin >> n >> l;
        for (int i = 0; i < n; i++)cin >> list[i];
        sort(list, list + n);
        low = 0;
        high = n - 1;
        sum = 0;
        while (low < high)
        {
            if (list[low] + list[high] <= l)low++;
            high--;
            sum++;
        }
        if (low == high)sum++;
        cout << sum << endl<<endl;
    }
    return 0;
}


發佈了79 篇原創文章 · 獲贊 1 · 訪問量 8908
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章