请大牛给看看咋错了

#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstring>
int a[100000],b[100000];
using namespace std;
void cz(int i,int j)//从i到j个设施走的最短步数
{
for(int k=i+1;k<j;k++)
{
if(a[k]<j)
b[k]=b[i]+1;
if(a[k]>=j)
b[k]=b[j]+1;
}
}
void cx(int n)
{
for(int i=0;i<n;i++)
{
if(a[i]>=n)
{
b[i]=b[n]+1;
cz(i,n);
cx(i);
break;
}
}
}
int main()
{
int n,m,i;
memset(b,0,sizeof(b));
while(~scanf("%d %d",&n,&m))
{
for(i=1;i<=n;i++)
{
scanf("%d",&a[i]);
a[i]+=i;
}
cx(n+1);
int x;
for(i=0;i<m;i++)
{
scanf("%d",&x);
printf("%d%c",b[x],i==m-1?'\n':' ');
}
}
return 0;
}

1 条评论

  • @ 2018-05-10 21:12:46

    原来是数组开小了

  • 1

信息

ID
1471
难度
6
分类
动态规划 | 单调性DP 点击显示
标签
递交数
733
已通过
188
通过率
26%
上传者