关注
//输入5
//输入1 4 3 2 5
//输出6
//把数组通过增加数字变成先递增后递减或者递增或者递减
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main(){
int n;
cin >> n;
vector<int> arr(n);
vector<int> dp(n, 0);
for(int i=0; i<n; i++)
cin >> arr[i];
int pre = arr[0];
for(int i=1; i<n; i++)
{
// 把数组从 0 到 i 加成递增需要的数量
dp[i] = dp[i-1] + max(0, pre - arr[i] + 1);
pre = max(pre + 1, arr[i]);
}
int res = dp.back(), cur = 0;
pre = arr.back();
for(int i=n-2; i>=0; i--){
// 重复加 的部分
//比较变成递增和变成递减需要增加的数字哪个小
int repeat = min(dp[i] - (i==0 ? 0 : dp[i-1]) , max(0, pre - arr[i] + 1));
// 把数组从 i 到 n-1 加成递减需要的数量
cur += max(0, pre - arr[i] + 1);
pre = max(pre + 1, arr[i]);
// dp[i] + cur - repeat 这个值为把第 i 个元素变成最大的元素,往左递减,往右递减,需要花费的最小代价
// 算出每一个情况,取最小
res = min(dp[i] + cur - repeat, res);
}
cout << res << endl;
system("pause");
return 0;
}
查看原帖
点赞 评论
相关推荐
06-26 11:08
北华航天工业学院 嵌入式软件开发 点赞 评论 收藏
分享
08-06 18:43
西安邮电大学 网络安全 点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 实习的内耗时刻 #
4024次浏览 60人参与
# 找工作有哪些冷知识 #
137533次浏览 2336人参与
# 腾讯大前端岗位热招中 #
12570次浏览 122人参与
# 你上一次给父母打电话是什么时候 #
2262次浏览 31人参与
# 你们公司哪个部门最累? #
29645次浏览 213人参与
# 工作上你捅过哪些篓子? #
2901次浏览 21人参与
# 去哪儿旅行秋招 #
219204次浏览 3147人参与
# 国央企笔面经互助 #
140906次浏览 1107人参与
# 得物求职进展汇总 #
103336次浏览 821人参与
# 你觉得专业和学校哪个对薪资影响最大 #
67212次浏览 513人参与
# 牛友们的论文几号送审 #
49807次浏览 797人参与
# 我的职场心眼子段位 #
40005次浏览 695人参与
# 选完offer后,你后悔学本专业吗 #
50146次浏览 246人参与
# 你认为工作的意义是什么 #
164992次浏览 1072人参与
# 这些公司卡简历很严格 #
45211次浏览 213人参与
# Tplink求职进展汇总 #
165524次浏览 855人参与
# 重来一次,我还会选择这个专业吗 #
335499次浏览 3741人参与
# 你觉得通信/硬件有必要实习吗? #
129628次浏览 1041人参与
# 央国企投递记录 #
97829次浏览 1405人参与
# 秋招笔面试记录 #
80789次浏览 1604人参与
# 美团秋招笔试 #
59484次浏览 395人参与
# 你觉得机械有必要实习吗? #
12160次浏览 87人参与