貪心簡單的 最優解
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;
}
每天一點點進步~