校OJ-P1454 讓我們蕩起雙槳 (學習進步)

貪心簡單的 最優解
1.輸入的體重已經按升序排好,
2.題目中一條船隻能最多兩個人。
所以首尾匹配才能達到最優狀態     分爲三種情況:

#include <stdio.h>
#include <stdlib.h>
int W,N,i,j,end,ans=0,a[100];//定義全局變量
int main()
{
    scanf("%d%d",&W,&N);
    for(i=0;i<N;i++)
    {
        scanf("%d",&a[i]);
    }
    j=0;                   //找到所輸入體重的首尾位置
    end=N-1;
    while(j<=end)          //下列三種情況考慮
    {
        if(j==end)        //第一種:當中間(中間不一定指正中間)剩下一個元素的情況,單獨一艘船
        {
            ans+=10;
            break;
        }
        if(a[j]+a[end]<=W)//第二種:當首尾相加剛好滿足一艘船  首尾同時往中間移動一位繼續判斷
        {
            j++;
            end--;
            ans+=10;
        }
        else              //第三種:若首尾之和不能一艘船,則後面往前的一個元素尋找判斷
        {
            end--;
            ans+=10;
        }
    }
    printf("%d",ans);
    return 0;
}
每天一點點進步~
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章