记搜,求调
查看原帖
记搜,求调
774230
zhangymst楼主2025/1/19 13:06
#include<bits/stdc++.h>
using namespace std;
const int N=3e5+7;
long long dp[N][2];	long long n,i,a[N];
long long f(long long jd,long long ji)
{
	if(dp[jd][ji]!=-1)	return dp[jd][ji];
	dp[jd][ji]=11451444;
	if(a[jd]%2==ji)
	{
		dp[jd][ji]=0;
		return 0;
	}
	if(jd-a[jd]>=0)
	{
		dp[jd][ji]=min(dp[jd][ji],f(jd-a[jd],ji));
	}
	if(jd+a[jd]<n)
	{
		dp[jd][ji]=min(dp[jd][ji],f(jd+a[jd],ji));
	}
	dp[jd][ji]++;
	return dp[jd][ji];
}
int main()
{

	cin>>n;
	for(i=0;i<n;i++)
	{
		cin>>a[i];
	}
	for(i=0;i<n;i++)
	{
		dp[i][0]=dp[i][1]=-1;
	}
	for(i=0;i<n;i++)
	{
		if(f(i,1-(a[i]%2))==11451445)
		{
			cout<<-1<<" ";
		}
		else
		{
			cout<<f(i,1-(a[i]%2))<<" ";
		}
	}
	return 0;
}

除样例全错

2025/1/19 13:06
加载中...