1733: 递增数组——C++

Posted _23_

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了1733: 递增数组——C++相关的知识,希望对你有一定的参考价值。

题目描述

牛牛有一个数组array,牛牛可以每次选择一个连续的区间,让区间的数都加1,他想知道把这个数组变为严格单调递增,最少需要操作多少次?

输入

输入一个整型数组,数组大小<=105,数组元素的值<=109。

输出

返回最少操作次数。

样例输入 Copy

1 2 1

样例输出 Copy

2

提示

把第三个数字+2可以构成1,2,3。

我用的前缀和写的这一题。如果要满足题意,那么这个数组的前缀都大于1就可以了,那么就求出前缀数组后,将所有小于1的数都加n次1,加的次数就是最终要求出来的解。

#include<bits/stdc++.h>

using namespace std;

int main(){
    int x;
    int a[100010],k=1;
    long long num=0;
    while(cin>>x){
        a[k++]=x-num;
        num+=a[k-1];
    }

    num=0;
    for(int i=1;i<k;i++){
        //cout<<a[i]<<" ";
        if(a[i]<1) num+=fabs(a[i])+1;
    }

    cout<<num<<endl;

    return 0;
}

以上是关于1733: 递增数组——C++的主要内容,如果未能解决你的问题,请参考以下文章

二维数组中的查找(C++和Python实现)

力扣技巧之动态规划力扣300:最大递增子序列C++

为啥此代码片段返回意外结果?

[2016-03-18][POJ][1733][Parity game]

C++将整数数组分割成奇数和偶数两个数组的源码

POJ1733