設有N2個乘客在第i層下,N1個乘客的目的地樓層在第i層以下,N3個乘客的樓層在第i層以上
假設電梯從停在i層改停在為i+1層,停在第i層時消耗的總能量為E
則改為i+1層停之後原先i層以上的乘客即N3個乘客少往上爬一層,原先第i層的N2個乘客需多往下爬一層,原先第i層以下的N1個乘客需多往下爬一層。
所需總能量變為E-N3*K+N1+N2
若N3*K>(N1+N2),則停在i+1層好
若停第i層比停i+1層能量消耗低,會出現停第i層比停第i+2層能量消耗多的情況麼
已知 N3*K<(N1+N2)
從i層到i+2層
消耗的能量變為E+2(N1+N2)+nPersons[i+1]-k(N3-nPersons[i+1])>E
是以循環隻要有一次停第i層比停i+1層能量消耗低,後面變無需再比較
//nPerson[i]表示到第i層的乘客數目
//N1代表目标樓層在第i層以下的乘客數
//N2代表目标樓層第i層的乘客數
//N3代表目标樓層在第i層以上的乘客數
void (int *nPerson,int k){
int nMinEnergy=0;
int nTargetFloor=1;
int N1,N2,N3;
int i;
for(N1=0,N2=nPerson[1],N3=0,i=2;i<N;i++)
{
N3+=nPerson[i];
nMinEnergy+=nPerson[i]*(i-1)*k;
}
for(i=2;i<N;i++)
{
if(N3*k>(N1+N2)){
nTargetFloor=i;
nMinEnergy=nMinEnergy-N3*K+N1+N2;
N1=N1+nPerson[i-1];
N3-=nPerson[i];
N2=nPerson[i];
}
else
break;
}
}