實踐題目
1225: 獨木舟上的旅行
2、問題描述
進行一次獨木舟的旅行活動,獨木舟可以在港口租到,並且之間沒有區別。一條獨木舟最多只能乘坐兩個人,且乘客的總重量不能超過獨木舟的最大承載量。我們要儘量減少這次活動中的花銷,所以要找出可以安置所有旅客的最少的獨木舟條數。現在請寫乙個程式,讀入獨木舟的最大承載量、旅客數目和每位旅客的重量。根據給出的規則,計算要安置所有旅客必須的最少的獨木舟條數,並輸出結果。
input
第一行包括兩個整數w,n,80<=w<=200,1<=n<=300,w為一條獨木舟的最大承載量,n為人數;
接下來的一組資料為每個人的重量(不能大於船的承載量);
output
輸出所需要的最少獨木舟的條數。
sample input
85 6
5 84 85 80 84 83
sample output
53、演算法描述
先用乙個陣列存放輸入的每個人的體重,然將陣列公升序排列,由於一條獨木舟最多只能坐下兩個人,而且我們目前需要輸出的是最少獨木舟的條數,因此考慮如果不超過獨木舟的最大承載量,將重量最大以及重量最小的人放到同一條獨木舟上;分別用i,j指向重量最小以及重量最大的人的重量,用count記錄獨木舟的條數。當ij,則退出迴圈。
**:
#include #include using namespace std;
int main()
//排序之後取乙個最大的和乙個最小的放到一條船上,這樣分配最均勻,不會造成資源浪費
sort(people,people+n);
// begin,end 從頭和從尾開始的下標,number記錄當前多少船
int begin = 0, end = n-1,number = 0;
while(true)
if(begin+1==end)else
}//最輕和最重如果可以承受就上船
if(people[begin] + people[end] <= w)else
}printf("%d",number);
}
4、演算法時間及空間複雜度分析
快排一遍的時間複雜度是o(nlogn),然後從頭向尾和從尾向頭遍歷一邊的時間複雜度是o(n),所以這題的時間複雜度是o(nlogn)。
因為空間複雜度跟陣列大小有關,因此空間複雜度為o(n)。
5、程式執行截圖
獨木舟上的旅行
獨木舟上的旅行 時間限制 3000 ms 記憶體限制 65535kb 難度 2 描述 進行一次獨木舟的旅行活動,獨木舟可以在港口租到,並且之間沒有區別。一條獨木舟最多只能乘坐兩個人,且乘客的總重量不能超過獨木舟的最大承載量。我們要儘量減少這次活動中的花銷,所以要找出可以安置所有旅客的最少的獨木舟條數...
獨木舟上的旅行
難度 2 描述進行一次獨木舟的旅行活動,獨木舟可以在港口租到,並且之間沒有區別。一條獨木舟最多只能乘坐兩個人,且乘客的總重量不能超過獨木舟的最大承載量。我們要儘量減少這次活動中的花銷,所以要找出可以安置所有旅客的最少的獨木舟條數。現在請寫乙個程式,讀入獨木舟的最大承載量 旅客數目和每位旅客的重量。根...
獨木舟上的旅行
描述 進行一次獨木舟的旅行活動,獨木舟可以在港口租到,並且之間沒有區別。一條獨木舟最多只能乘坐兩個人,且乘客的總重量不能超過獨木舟的最大承載量。我們要儘量減少這次活動中的花銷,所以要找出可以安置所有旅客的最少的獨木舟條數。現在請寫乙個程式,讀入獨木舟的最大承載量 旅客數目和每位旅客的重量。根據給出的...