名字不要取太长像我这样应该刚刚好 • 16天前
#include <bits/stdc++.h> using namespace std;
int dp[205];
int main() {
int n;
int a[205];
memset(dp, INF, sizeof(dp));
dp[1] = 0;
cin >> n;
for (int i = 1; i <= n; i++)
cin >> a[i];
for (int i = 2; i <= n; i++) {
if (a[i - 1] + 1 == a[i]) {
dp[i] = dp[i - 1] + 1;
}
for (int j = 1; j < i; j++) {
int k = 1;
while ((1 << k) < a[i] - a[j])
k++;
dp[i] = min(dp[i], dp[j + k] + k + 1);
}
}
if (dp[n] > 1e9)
cout << -1;
else
cout << dp[n];
return 0;
}
评论:
请先登录,才能进行评论