閱讀644 返回首頁    go 阿裏雲 go 技術社區[雲棲]


獨木舟上的旅行

獨木舟上的旅行

時間限製:3000 ms  |  內存限製:65535 KB
難度:2
描述

進行一次獨木舟的旅行活動,獨木舟可以在港口租到,並且之間沒有區別。一條獨木舟最多隻能乘坐兩個人,且乘客的總重量不能超過獨木舟的最大承載量。我們要盡量減少這次活動中的花銷,所以要找出可以安置所有旅客的最少的獨木舟條數。現在請寫一個程序,讀入獨木舟的最大承載量、旅客數目和每位旅客的重量。根據給出的規則,計算要安置所有旅客必須的最少的獨木舟條數,並輸出結果。

輸入
第一行輸入s,表示測試數據的組數;
每組數據的第一行包括兩個整數w,n,80<=w<=200,1<=n<=300,w為一條獨木舟的最大承載量,n為人數;
接下來的一組數據為每個人的重量(不能大於船的承載量);
輸出
每組人數所需要的最少獨木舟的條數。
樣例輸入
385 65 84 85 80 84 8390 390 45 60100 550 50 90 40 60
樣例輸出
533

查看代碼---運行號:252535----結果:Accepted

運行時間:2012-10-06 09:22:25  |  運行人:huangyibiao
01.#include <iostream>
02.#include <cstdio>
03.#include <algorithm>
04.using namespace std;
05. 
06.int main()
07.{
08.int sample;
09.cin >> sample;
10. 
11.while (sample --)
12.{
13.int nMaxWeight;//最大承載量
14.int nNumOfPeople;//人數
15. 
16.scanf("%d%d", &nMaxWeight, &nNumOfPeople);
17.int *weight = new int[nNumOfPeople];
18. 
19.for (int i = 0; i < nNumOfPeople; i++)
20.scanf("%d", &weight[i]);
21. 
22.sort(weight, weight+nNumOfPeople);  //從小到大排序
23. 
24.int nCanoe = 0;//獨木舟的數量
25.int nLeft = nNumOfPeople;
26.int begin = 0, end = nNumOfPeople-1;
27.while (nLeft)//當沒全部上獨木舟時
28.{
29.if (weight[begin] + weight[end] <= nMaxWeight)
30.{
31.nCanoe++;
32.begin ++;
33.end --;
34.nLeft -= 2;
35.}
36.else
37.end --;
38. 
39.if (begin >= end)//說明剩下的人中任意兩個一起都超重
40.{
41.nCanoe += nLeft;//剩下的人,每人一個獨木舟
42.nLeft = 0;
43.}
44.}
45.cout << nCanoe << endl;
46. 
47.delete [] weight;
48.}
49.return 0;
50.}

最後更新:2017-04-02 15:14:53

  上一篇:go a letter and a number
  下一篇:go “寬帶中國”戰略下的駐地網建設