特殊的测试

Table of Contents

时间限制:

C/C++语言 1000MS;其他语言 3000MS

内存限制:

C/C++语言 131072KB;其他语言 655360KB

题目描述:

小C在做一种特殊的服务器负载测试,对于一个请求队列中的请求,每一个请求都有一个负荷值,为了保证服务器稳定,请求队列中的请求负荷必须按照先递增后递减的规律(仅递增,仅递减也可以),比如[ 1,2,8,4,3 ],[ 1,3,5 ]和[ 10 ]这些是满足规律的,还有一些不满足的,比如[ 1,2,2,1 ],[ 2,1,2 ]和[ 10,10 ]。现在给你一个请求队列,你可以对请求的负荷值进行增加,要求你调整队列中请求的负荷值,使数组满足条件。最后输出使队列满足条件最小的增加总和。

输入

输入有两行,

第一行是

N (1≤n≤5000) ,代表请求队列中的请求数量。

第二行有

N个数字 a1,a2…an (1≤ai≤10^9)。Ai是第i个请求的负荷值。

输出

输出这个最小增加总和

样例输入

5 1 4 3 2 5

样例输出

6

提示

样例解释,此时合法队列为[1,4,5,6,5],最小增加和为6

此题代码只通过27%,期待更新正确的代码
import java.util.Scanner;
public class Test02{
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        int[] arr = new int[n];
        int max = 0;
        for(int i=0;i<n;i++){
            arr[i] = scanner.nextInt();
            if(max<arr[i]){
                max = arr[i];
            }
        }
        int max_curr = arr[0];
        for(int i=0;i<n;i++){
            if(max_curr<max){
                if(max_curr<arr[i+1]){
                    max_curr = arr[i+1];
                }else{
                    max_curr++;
                    arr[i+1]=max_curr;
                }
            }else{
                boolean flag = true;
                for(int j=i+1;j<n;j++){
                    if(max_curr-(j-i)<arr[j]){
                        flag = false;
                        max_curr ++;
                        arr[i+1] = max_curr;
                        break;
                    }
                }
                if(flag){
                    System.out.println(max_curr);
                    break;
                }
            }
        }
        scanner.close();
    }
}