NYOJ 71 独木舟上的旅行

独木舟上的旅行

时间限制:3000 ms  |           内存限制:65535 KB
难度:2
 
描述

进行一次独木舟的旅行活动,独木舟可以在港口租到,并且之间没有区别。一条独木舟最多只能乘坐两个人,且乘客的总重量不能超过独木舟的最大承载量。我们要尽量减少这次活动中的花销,所以要找出可以安置所有旅客的最少的独木舟条数。现在请写一个程序,读入独木舟的最大承载量、旅客数目和每位旅客的重量。根据给出的规则,计算要安置所有旅客必须的最少的独木舟条数,并输出结果。

 
输入
第一行输入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
3
3
思路:排序,每次至多载两人,看max(可变)和min(可变)能否一起,能则改变min,max,人数减2,否则减1。代码如下:
 1  
 2 #include<stdio.h>
 3 #include<algorithm>
 4 using namespace std;
 5 int main(){
 6     int m,n,a[100],c,r,i,b,p;
 7     scanf("%d",&p);
 8     while(p--){
 9         n=0;
10     scanf("%d%d",&r,&m);
11     for(i=0;i<m;i++)
12         scanf("%d",&a[i]);
13     sort(a,a+m);
14     b=m-1;c=0;
15     do{
16         if(a[c]+a[b]>r) b--;
17            else {c++;b--;}
18             n++;
19         if(c==b) n++;
20     }
21     while(c!=b&&b+1!=c);
22     printf("%d\n",n);
23     }
24     return 0;
25 }        
View Code

 

posted on 2013-08-29 10:23  落水寒冰  阅读(219)  评论(0编辑  收藏  举报

导航