【DP】迷之阶梯

D e s c r i p t i o n Description

在这里插入图片描述

T r a i n Train o f of T h o u g h t Thought

这一道题也是一道 D P DP ,只需要三重循环
1.枚举现在在哪一阶
2.枚举从哪一阶来的
3.枚举退后了多少阶
其余 ↓↓↓

C o d e Code

#include<cstdio>
#include<iostream>
using namespace std;
long long a[205],f[205],t=1;
int n;
int main()
{
	scanf("%d",&n);
	for(int i=0; i<=n; ++i)
	 f[i]=1<<29;//手动赋初值
	for (int i=1; i<=n; ++i)
	  scanf("%lld",&a[i]);
	f[1]=0;
	for (int i=2; i<=n; ++i)//枚举当前级数
	 for (int j=i-1; j>=1; --j)//枚举从哪来
	  for (long long t=1,k=0; k<j; ++k,t*=2)//枚举退后了多少阶
	    if (a[j-k]+t>=a[i]) f[i]=min(f[i],f[j]+k+1);//找一个最小值
	if (f[n]!=f[0]) printf("%lld",f[n]);//看是否改变值了
	 else printf("-1");
}

猜你喜欢

转载自blog.csdn.net/LTH060226/article/details/89026037