NYOJ71-独木舟上的旅行

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 int cmp(const void *a,const void *b)
 4 {
 5     return *(int *)b-*(int *)a;//降序 
 6 }
 7 int main()
 8 {
 9     int i,s,w,n,num,max,min;
10     int a[400];
11     scanf("%d",&s);
12     while(s--)
13     {
14         num=0;
15         scanf("%d%d",&w,&n);
16         for(i=0;i<n;i++)
17         scanf("%d",a+i);
18         qsort(a,n,sizeof(a[0]),cmp);
19         max=0;min=n-1;//从大到小排过序后,让max 和min分别指向开头和结尾的下标,双向同时进行;(以max) 为主,不断地向后移;min向前移;
20         while(max<=min)
21         {
22             if(a[max]==w)  {max++;num++;}//如果前面的元素等于船的容量,则所需船数加1
23             else if(a[max]+a[min]<=w)//如果前面的元素小于船的容量,就看后面的元素有没有和该元素相加后小于等于船的容量的,若有则船数加1,同时下标一个加1,一个减1;
24             {
25                 max++;min--;num++;
26             }
27             else {max++;num++;}//如果没有和前面元素相匹的元素,则船数加1,同时max加1,看下一个元素;
28         }
29         printf("%d\n",num);
30     }
31     system("pause");
32     return 0;
33 }
34             

posted on 2012-08-02 16:31  mycapple  阅读(197)  评论(0编辑  收藏  举报

导航