调整数列
Description
给定一个长度为n 的序列,你可以将某些各减去一个数,使得整个序列严格递增。 你需要求出所有减去的数的总和的最小值。 例如:有一个长度为3 的序列 5,5,5最优方案是 5-2,5-1,5即 3,4,5这样所有减去的数的总和是 2+1=3,为最小值。
Input
输入第一行一个整数n,表示序列的长度。 第二行n个整数,描述这个序列 1≤n≤100,序列中的数字皆为不大于 20000 的正整数。
Output
输出一行一个整数,表示总和的最小值。
Examples
input
3
5
5
5
output
3
从最后一个数开始往前扫,当前一个数a[i-1]比它大时,将a[i-1]改成a[i]-1,同时ans加上a[i-1]-a[i]+1。
完整代码如下
#include <bits/stdc++.h>
using namespace std;
int n,a[110],i,ans,k;
int main(){
cin>>n;
for(i=1 ; i<=n ; i++)cin>>a[i];
for(i=n;i>=1;i--){
k=a[i-1]-a[i]+1;
if(k>=1){
a[i-1]-=k;
ans+=k;
}
}
cout<<ans;
return 0;
}