描述
進行一次獨木舟的旅行活動,獨木舟可以在港口租到,並且之間沒有區別。一條獨木舟最多只能乘坐兩個人,且乘客的總重量不能超過獨木舟的最大承載量。我們要儘量減少這次活動中的花銷,所以要找出可以安置所有旅客的最少的獨木舟條數。現在請寫乙個程式,讀入獨木舟的最大承載量、旅客數目和每位旅客的重量。根據給出的規則,計算要安置所有旅客必須的最少的獨木舟條數,並輸出結果。
輸入 第一行輸入s,表示測試資料的組數;
每組資料的第一行包括兩個整數w,n,80<=w<=200,1<=n<=300,w為一條獨木舟的最大承載量,n為人數;
接下來的一組資料為每個人的重量(不能大於船的承載量);
輸出 每組人數所需要的最少獨木舟的條數。
樣例輸入
3
85 6
5 84 85 80 84 83
90 3
90 45 60
100 5
50 50 90 40 60
樣例輸出
5
33
思路:貪心演算法
對於求 最多/最少 問題,可以考慮 貪心演算法 或者 動態規劃。
定義a[i] (i=1~n) 表示n個人的體重,對a[i]從小到大進行快排。
總共n個人,那麼最多需要n條船。如果每次運輸2個人,所需船數是最少的,所以大體思路就是一條船盡可能運輸2個人。
如何做到?a[i]已排好序。 就是看,最重的人和最輕的人,兩人能不能一起乘船,如果可以就讓他們一起乘船,然後j++,k–(因為此時不讓a[1]與a[n]一起,卻讓a[2]與a[n]一起,如果a[2]與a[n]可以一起,那麼a[2]與a[n-1]就一定可以一起,那為什麼不把a[2]留給a[n-1]呢?如果a[2]與a[n]不能夠一起,那不就浪費資源了?)
如果最重的人和最輕的人,兩人不能一起乘船,就讓最重的人乙個人乘船,因為他以後絕對找不到「伴侶」了,然後k–.
#include
#include
void kuaipai(int* a,int l,int r);
int main()
kuaipai(a,1,n);
j=1;
k=n;
num=0;
while(jif(a[j]+a[k]<=w)
else
}if(j==k)
printf("%d\n",num);
}return0;}
void kuaipai(int* a,int l,int r)
ACM 獨木舟上的旅行
時間限制 3000 ms 記憶體限制 65535 kb 難度 2 描述進行一次獨木舟的旅行活動,獨木舟可以在港口租到,並且之間沒有區別。一條獨木舟最多只能乘坐兩個人,且乘客的總重量不能超過獨木舟的最大承載量。我們要儘量減少這次活動中的花銷,所以要找出可以安置所有旅客的最少的獨木舟條數。現在請寫乙個程...
獨木舟上的旅行
獨木舟上的旅行 時間限制 3000 ms 記憶體限制 65535kb 難度 2 描述 進行一次獨木舟的旅行活動,獨木舟可以在港口租到,並且之間沒有區別。一條獨木舟最多只能乘坐兩個人,且乘客的總重量不能超過獨木舟的最大承載量。我們要儘量減少這次活動中的花銷,所以要找出可以安置所有旅客的最少的獨木舟條數...
獨木舟上的旅行
難度 2 描述進行一次獨木舟的旅行活動,獨木舟可以在港口租到,並且之間沒有區別。一條獨木舟最多只能乘坐兩個人,且乘客的總重量不能超過獨木舟的最大承載量。我們要儘量減少這次活動中的花銷,所以要找出可以安置所有旅客的最少的獨木舟條數。現在請寫乙個程式,讀入獨木舟的最大承載量 旅客數目和每位旅客的重量。根...