T5獨木舟上的旅行

T5獨木舟上的旅行

時間限制:1000 ms  |  內存限制:65535 KB

【問題描述】

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

【輸入】

第一行輸入s,表示測試數據的組數;

每組數據的第一行包括兩個整數w,n,80<=w<=200,1<=n<=300,w爲一條獨木舟的最大承載量,n爲人數;

接下來的一組數據爲每個人的重量(不能大於船的承載量);

【輸出】

每組人數所需要的最少獨木舟的條數。

【樣例輸入】

3

85 6

5 84 8580 84 83

90 3

90 4560

100 5

50 5090 40 60

【樣例輸出】

5

3

3

【答案】

#include<stdio.h>
int a[301],b[301];
void sort(int n)
{
int j,i;
for(i=0;i<n-1;i++)
for(j=1;j<n;j++)
{
if(a[i]>a[j])
{
int temp=a[i];
a[i]=a[j];
a[j]=temp;
}
}
}


int main()
{
int s,w,n;
scanf("%d",&s);
while(s--)
{
scanf("%d%d",&w,&n);
int i;
for(i=0;i<n;i++)
scanf("%d",&b[i]);
sort(n);
int count=0,j;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
{
if(i!=j&&b[i]+b[j]==w&&b[i]!=0&&b[j]!=0)
{
count++;
b[i]=0;
b[j]=0;
}
}
j=0;
for(i=0;i<n;i++)
{
if(b[i]!=0)
{
a[j]=b[i];
j++;
}
}
i=0,j=j-1;
if(i==j)
count++;
while(i!=j)
{
if(a[i]+a[j]>w)
{
j--;
count++;
}
else if(a[i]+a[j]<w)
{
i++;
j--;
count++;
}
if(i==j)
count++;
}
printf("%d\n",count);
}
return 0;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章