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             

你可能感兴趣的:(OJ)