本帖最后由 jhq999 于 2022-11-28 19:03 编辑 #include <stdio.h>
//int node[1000000];
int main()
{
int i,P,Q,n,t,prv[3]= {0},cur=0; //cur是跳到当前位置消耗的最小量,
//prv[1]prv[2]是当前位置前两个位置消已经耗的能量
scanf("%d%d",&P,&Q);
scanf("%d",&n);
prv[1]=0;
scanf("%d",&prv[2]);
prv[2]-=Q;
for (i=2; i<=n; i+=1)
{
/*if((P+prv[1]<Q)&&((P+prv[2]<Q))
{
printf("NO");
return 0;
}*/
if(prv[1]>prv[2])t=prv[1];//选前两个位置消耗最少的
else t=prv[2];
if(P+t<Q)
{
printf("NO");
return 0;
}
scanf("%d",&cur);//当前位置的能量ai
cur+=t-Q;//当前位置的能量ai减去跳一次消耗的能量再加上前两个能量消耗最少的
prv[1]=prv[2];
prv[2]=cur;
}
if(prv[1]>prv[2])t=prv[1];
else t=prv[2];//终点前两个位置消耗最少的
if(P+t<Q)
{
printf("NO");
return 0;
}
printf("%d",P+t-Q);
return 0;
}
|