70分,求调
查看原帖
70分,求调
537755
Hu_taooo楼主2023/9/9 17:52

dp[i]dp[i]表示到第ii个台阶的最优方案;

#include <bits/stdc++.h>
using namespace std;

const int N = 210;
long long n,temp;
long long dp[N] , h[N];

int main()	{
	ios::sync_with_stdio(false);
	cin.tie(0);
	cin >> n;
	for(int i=1 ; i<=n ; i++)	cin >> h[i];
	
	for(int i=2 ; i<=n ; i++)	dp[i] = 2e18;
	for(int i=2 ; i<=n ; i++)	{
		if(h[i] == h[i-1]+1)	dp[i] = dp[i-1] + 1;
		for(int j=i-1 ; j>=1 ; j--)	{
			for(int p=j+1 ; p<=n ; p++)	{
				temp = pow(2,i-j);
				if(h[p] <= h[j] + temp)	dp[p] = min(dp[p] , dp[i] + i - j + 1);
			}
		}
	}

	if(dp[n] >= 2e18)	cout << -1 << endl;
	else	cout << dp[n] << endl;
	return 0;
}
2023/9/9 17:52
加载中...