为什么我这样递推g不对

#include<iostream>

using namespace std;

int main()

{

int a[100010];//怪物生命

long long b[100010];//生命加盾

int n;

cin>>n;

for(int q=1;q<=n;q++)scanf("%d",&a[q]),b[q]=a[q];

for(int q=n;q>1;q--)//盾的处理

{

if(a[q-1]%2==0)b[q]+=a[q-1]/2;

else

b[q]+=(a[q-1]-1)/2;

}

int g=0;//已通过关卡数

long long d=0,c=0;

//d当前能力值 c初始能力值

while(g<n)

{

if(d<=b[g+1])//无法通过下一关

{

long long t=b[g+1]+1;//通过下一关需要的能力值

long long x=t-d;//提升的能力值

c+=x;//初始提升的能力值

d=t;

t=(a[g+1]-1)/2;//通过增加的生命值

d+=t; //增加生命值

g++;//关卡加一

}

else

{

int t=(a[g+1]-1)/2;//通过增加的生命值

d+=t; //增加生命值

g++; //关卡加一

}

}

cout<<c;

return 0;

}

全部评论

相关推荐

1 1 评论
分享
牛客网
牛客企业服务