独木舟
51Nod - 1432
错误思路( 没有考虑完全)+改进后的正确:把所有人的体重从小到大排序,然后让最轻的和最重的坐一起,如果超重,则船数加一,又因为一开始确定的船数就是n/2,所以这个加一就相当于是在原有基础上又加了一,也就是轻的那个人一条船,重的那个人一条船,然后继续让第二轻的和第二重的比较....。这实际上是不正确的,重的那个坐一条船没问题,因为连最轻的都没法和他一起坐,肯定就是他一个人坐了,但是轻的那一个应该和第二重的人再配对,也就是把最重的那个踢出去,然后在新的队伍里再按照最轻和最重搭配的思想继续进行。
正确代码:
仔细看代码,理解其思想
#include <stdio.h>
#include <algorithm>
using namespace std;
int main()
{
int n,m,i,number=0;
scanf("%d%d",&n,&m);
int a[n];
for(i=0;i<n;i++)
scanf("%d",&a[i]);
sort(a,a+n);
int min=0,max=n-1;
while(1)
{
if(min==max)
{
number++;
break;
}
if(max<min)
break;
if(a[min]+a[max]<=m)
{
min++;
max--;
number++;
}
else
{
max--;
number++;
}
}
printf("%d\n",number);
return 0;
}