请求找错,90分,第一个测试点未过
查看原帖
请求找错,90分,第一个测试点未过
853801
useful_algorithms楼主2023/9/29 21:11

代码如下

#include<bits/stdc++.h>
using namespace std;
int n;
long long h[100001];//高度 
long long f[100001];//最少步数
int main()
{
	cin>>n;
	int i,j,k;
	for(i=1;i<=n;i++)cin>>h[i];
	memset(f,0x3f,sizeof(f));//置为一个大数 
	f[1]=0;
	long long pd=f[0];  //int pd=f[0];不能int 
	for(i=2;i<=n;i++)
	{
		if(h[i-1]+1>=h[i]) f[i]=f[i-1]+1;//可以直接上 
		for(j=i-1;j>=1;j--)//枚举退下前的层数 
			for(k=j-1;k>=1;k--)//枚举退到哪 
				if(h[i]<=(1<<(j-k))+h[k]) 
				{
					f[i]=min(f[i],f[j]+j-k+1); 
				}
	}
	if(f[n]!=pd)//如果能跳到,输出最小次数 
	cout<<f[n]; 
	else cout<<-1;//否则输出-1 
} 

以上代码90分,第一个测试点没过,请求找错

2023/9/29 21:11
加载中...