减成一

减成一

https://ac.nowcoder.com/acm/problem/207421

题目:减成一
来源:“科林明伦杯”哈尔滨理工大学第十届程序设计竞赛(同步赛)

解题思路

题目:存在 n 个数,每次操作可以任选一个区间使得区间内的所有数字减一。问最少多少次操作,可以让所有数都变成 1。

① 以 1 所在的位置作为区间的边界,但不包括该位置。
② 遍历区间得到区间的最小值 mini,将区间中的每个数减去 mini - 1,并将该值计入结果 ans
③ 此时,原来区间最小值所在位置的数字变成 1,继续步骤①,直至所有数都变成 1。

C++代码

#include<iostream>
#include<vector>
using namespace std;

int ans;

void opCnt(vector<int>& arr, int left, int right){
    if(left > right)
        return;
    if(left == right){
        ans += arr[left] - 1;
        return;
    }
    vector<int> v;
    v.push_back(left);
    int mini = arr[left];
    for(int i=left+1; i<=right; ++i){
        if(arr[i] < mini){
            v.clear();
            v.push_back(i);
            mini = arr[i];
        }
        else if(arr[i] == mini){
            v.push_back(i);
        }
    }

    int minus = mini - 1;
    ans += minus;
    for(int i=left; i<=right; ++i){
        arr[i] -= minus;
    }
    opCnt(arr, left, v[0]-1);
    for(int i=0; i<v.size()-1; ++i){
        opCnt(arr, v[i]+1, v[i+1]-1);
    }
    opCnt(arr, v.back()+1, right);
}

int main(){
    int t;
    cin >> t;
    while(t){
        int n;
        cin >> n;
        vector<int> arr(n);
        for(int i=0; i<n; ++i)
            cin >> arr[i];
        ans = 0;
        opCnt(arr, 0, n-1);
        cout << ans << endl;
        --t;
    }
    return 0;
}
全部评论

相关推荐

焦虑中,不知道怎么办了。。。
西北上单:应该放俩项目合理一些 我是一个业务开发项目 一个AI项目和你这个写的亮点差不多
你的简历改到第几版了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
正在热议
更多
# AI面会问哪些问题? #
24273次浏览 477人参与
# 中国电信笔试 #
30930次浏览 283人参与
# 开放七大实习专项,百度暑期实习值得冲吗 #
13974次浏览 208人参与
# 你的实习产出是真实的还是包装的? #
18515次浏览 329人参与
# 如果秋招能重来,我会____ #
96446次浏览 499人参与
# 春招至今,你的战绩如何? #
59119次浏览 535人参与
# 米连集团26产品管培生项目 #
12905次浏览 285人参与
# i人适合做什么工作 #
36645次浏览 123人参与
# 我是面试官,请用一句话让我破防 #
79291次浏览 219人参与
# 哪些公司真双非友好? #
69122次浏览 287人参与
# 找AI工作可以去哪些公司? #
7456次浏览 177人参与
# 从事AI岗需要掌握哪些技术栈? #
7444次浏览 234人参与
# 五一之后,实习真的很难找吗? #
102790次浏览 584人参与
# 投递几十家公司,到现在0offer,大家都一样吗 #
339699次浏览 2163人参与
# 你做过最难的笔试是哪家公司 #
29459次浏览 179人参与
# 你小时候最想从事什么职业 #
159824次浏览 2072人参与
# 阿里笔试 #
175926次浏览 1299人参与
# 金三银四,你的春招进行到哪个阶段了? #
21389次浏览 274人参与
# 一张图晒出你司的标语 #
3777次浏览 71人参与
# 面试被问期望薪资时该如何回答 #
382422次浏览 2163人参与
# 晶盛机电求职进展汇总 #
35209次浏览 318人参与
# 应届生第一份工资要多少合适 #
20439次浏览 84人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务