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