独木舟(蕴含贪心思想)思想题

 

独木舟

  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;
}

猜你喜欢

转载自blog.csdn.net/nanfengzhiwoxin/article/details/80548958