IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> C. Make it Increasing -> 正文阅读

[数据结构与算法]C. Make it Increasing

https://codeforces.com/contest/1668/problem/C
在这里插入图片描述
input

5
1 2 3 4 5

output

4

input

7
1 2 1 2 1 2 1

output

10

input

8
1 8 2 7 3 6 4 5

output

16

在这里插入图片描述
题意

给定 n n n 以及 n 个数表示为 a i a_i ai? ,现你需要通过最小操作数将 b b b 数组变成严格递增的数组,其中 b b b 数组内元素一开始都是 0 ,每次操作中,对于 b i b_i bi? 可以 变成 b i + a i b_i + a_i bi?+ai? o r or or b i ? a i b_i - a_i bi??ai?
注: n n n 5 e 3 5e3 5e3

思路
对于一开始都相等的序列,选定某个特殊点,则其左边都减小,右边都增大
在这里插入图片描述

我们可以想一下,最终构造的方法是不是特殊点一定是是 0 0 0 ,即不用动
(如下图)(并不严格的证明)
假设一下 b 5 b_5 b5? + a 5 +a_5 +a5?
对于 b 6 ? 10 b_{6-10} b6?10? 都需要使用至少 1 次步数来平衡,如果其中 a 6 ? 10 a_{6-10} a6?10?某一个小于 a 5 a_5 a5?则需要两步或更多等 ,而换来的只是 b 4 b_4 b4? 不用动,而 b 1 ? 3 b_{1-3} b1?3? 仍需正常的偏移构造递增序列,实际上非常亏

在这里插入图片描述
综上,我们只需要枚举 1 ? n 1 - n 1?n 作为特殊点,然后计算对应的步数去最小即可

AC代码

#include <bits/stdc++.h>
#define endl '\n'
#define AC return 0;
using namespace std;
//#define ll long long
#define int long long

int e[5005];
int b[5005];
void slove()
{
    int n;
    cin >> n;
    for(int i = 1; i <= n; i++)
        cin >> e[i];
    int ans = 1e18;
    for(int pos = 1; pos <= n; pos++)
    {
        int res = 0;
        for(int i = 1; i <= n; i++)
            b[i] = 0;
        // cout << pos << endl;
        //left
        for(int i = pos - 1; i >= 1; i--)
        {
            int c = b[i + 1] - b[i];
            int k = (c + e[i]) / e[i];
            // cout << k << endl;
            b[i] = k * e[i];
            res += k;
        }

        //rig
        for(int i = pos + 1; i <= n; i++)
        {
            int c = b[i - 1] - b[i];
            int k = (c + e[i]) / e[i];
            b[i] = k * e[i];
            res += k;
        }
        // for(int i = 1; i <= n; i++)
        //     cout << b[i] << " " ;
        // cout << endl;
        ans = min(ans,res);
    }    
    cout << ans << endl;
    
    
}

signed main()
{
    ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
    //int T;cin >> T; while(T--)
    slove();
    AC
}

发现我的题解都好多画图(

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-04-22 19:01:27  更:2022-04-22 19:05:53 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 7:17:17-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码