重要的点在,你的下一步最远能到达i+ai这个瓷砖,即如果最大到达第i的瓷砖且这个瓷砖的Ai小于等于0,则此瓷砖为最大的到达的瓷砖位置。
**start用来存储当前最大 i+ai值 **
主要注释如下:
int main()
{
int n,i;
cin>>n;
long long start=1,q; //start用来存储当前最大 i+ai值
//控制瓷砖的块数
for(i=1;i<=n;i++)
{
cin>>q;//输入当前瓷砖对应的权值
if(i>start) //如果当前瓷砖值大于start所存储的最大权值,则结束循环(start就是所能到达的第几块瓷砖)
break;
if(i<=n) //只要在循环内,则计算当前最大的i+ai值
start=max(start,i+q);
}
if(start>=n)
cout<<n;
else
cout<<start;
return 0;
}
这个比较简单,认真读题,就一排瓷砖,总数n ,当前位置i ,每次跳转的是权重,开始是第一个瓷砖,标红的判断是当前的位置大于开始值1