1.最优清零方案

1.题意描述

给定一个长度为 NNN 的数列 A1,A2,⋯,ANA_1,A_2,⋯,A_NA1​,A2​,⋯,AN​ 。现在小蓝想通过若干次操作将 这个数列中每个数字清零。
每次操作小蓝可以选择以下两种之一:

  1. 选择一个大于 0 的整数, 将它减去 1 ;
  2. 选择连续 KKK 个大于 0 的整数, 将它们各减去 1 。

小蓝最少经过几次操作可以将整个数列清零?

2.输入格式

输入第一行包含两个整数 NNN 和 KKK 。
第二行包含 NNN 个整数A1,A2,⋯,ANA_1,A_2,⋯,A_NA1​,A2​,⋯,AN​。

3.输出格式

输出一个整数表示答案。

4.样例输入

4 2
1 2 3 4

5.样例输出

6

6.数据范围

1≤K≤N≤1000000,0≤Ai≤1000000。1≤K≤N≤1000000,0≤A_i ≤1000000 。1≤K≤N≤1000000,0≤Ai​≤1000000。

7.原题链接

最优清零方案

2.解题思路

比较直观地思考,如果没有操作2,那么总操作次数则是数组的总和。对于答案来说操作2一定是不差于操作1的,为了使操作次数更少,我们应该尽可能多使用操作2

所以问题转化为我们对数组最多能进行几次操作2?答案即是操作2的次数加上剩下数组的总和。

对于一段区间 [l,r][l,r][l,r],它能进行操作的次数应当是该区间内的最小值 mimimi,然后我们需要将区间 [l,r][l,r][l,r] 所有数都减去 mimimi。由于需要去考虑每一个长度为 KKK 的连续子数组,显然我们需要使用到滑动窗口去解决问题。

从贪心的角度思考,我们从左往右进行窗口滑动,统计操作2可进行的最大次数。

对于每一个长度为 KKK 的区间 [l,r][l,r][l,r] 如果我们都手动去遍历得到 mimimi 以及手动减去mimimi,在极限数据下且k=n/2k=n/2k=n/2时,复杂度会是O(n2)O(n^2)O(n2)所以会超时。

考虑如何优化,假设此时枚举的窗口的起点为 lll,那么终点为l+k−1l+k-1l+k−1,设区间 [l,r][l,r][l,r] 的最小值的下标为 t(t∈[l,r])t(t\in[l,r])t(t∈[l,r]),如果按照正常滑动窗口,我们下一次窗口枚举的起点为 l+1l+1l+1,但由于操作2要求区间全部数一定大于0。显然 a[t]a[t]a[t] 在减去mimimi之后的值一定为0,意味着区间内包含下标t一定不可能再进行操作2,我们可以将下一次窗口枚举的起点设为t+1,以此完成优化,减少无效窗口的枚举次数。

值得注意一点的是一个区间[l,r][l,r][l,r]可能同时有多个最小值下标 ttt,我们应当选择最右边的一个。

3.Ac_code

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
typedef unsigned long long uLL;
typedef pair<int, int> PII;
#define pb(s) push_back(s);
#define SZ(s) ((int)s.size());
#define ms(s,x) memset(s, x, sizeof(s))
#define all(s) s.begin(),s.end()
const int inf = 0x3f3f3f3f;
const int mod = 1000000007;
const int N = 200010;int n, k;
void solve()
{std::cin >> n >> k;std::vector<int> a(n);LL ans = 0;for (auto&v : a) {cin >> v;}for (int i = 0; i + k - 1 < n; ++i) {int t = 0;int mi = 1e9;for (int j = i; j < i + k; ++j) {if (a[j] <= mi) {t = j;mi = a[j];}}ans += mi;for (int j = i; j < i + k; ++j) a[j] -= mi;i = t;}for (auto v : a) ans += v;cout << ans << '\n';
}
int main()
{ios_base :: sync_with_stdio(false);cin.tie(0); cout.tie(0);int t = 1;while (t--){solve();}return 0;
}

第十三届蓝桥杯省赛 Java A 组 I 题、Python A 组 I 题、Python B 组 J 题——最优清零方案(AC)相关推荐

  1. 第十三届蓝桥杯省赛 JAVA A组 - 蜂巢

    ✍个人博客:https://blog.csdn.net/Newin2020?spm=1011.2415.3001.5343

  2. 2022 第十三届 蓝桥杯 省赛 Java B组 真题 详细解析 答案

    文章目录 试题 A: 星期计算 [问题描述] [答案] 试题 B: 山 [问题描述] [答案] 试题 C: 字符统计 [问题描述] [答案] 试题 D: 最少刷题数 [问题描述] [答案] 试题 E: ...

  3. 第十三届蓝桥杯模拟赛第二期JAVA组个人题解

    第十三届蓝桥杯模拟赛第二期JAVA组个人题解 文章目录 第十三届蓝桥杯模拟赛第二期JAVA组个人题解 题目1 题目2 题目3 题目4 题目5 题目6 题目7 题目8 题目9 题目10 题目1 小蓝的I ...

  4. java迷宫类编程题_第十届蓝桥杯省赛java类B组 试题 E:迷宫 (动态规划之回溯法)...

    问题描述 试题 E: 迷宫 [问题描述] 下图给出了一个迷宫的平面图,其中标记为 1 的为障碍,标记为 0 的为可 以通行的地方. 010000 000100 001001 110000 迷宫的入口为 ...

  5. 2022年第十三届蓝桥杯省赛C/C++B组个人题解

    2022年第十三届蓝桥杯省赛C/C++B组个人题解 试题 A: 九进制转十进制(数学) 试题 B: 顺子日期(语文) 试题 C: 刷题统计(模拟) [样例输入] [样例输出] 试题 D: 修剪灌木(找 ...

  6. 2022年十三届蓝桥杯国赛(C/C++大学B组)个人题解

    2022年十三届蓝桥杯国赛(C/C++大学B组)个人题解 更新:成绩出来了,估分50分左右,最后拿了个国二,还差点到国一,有点出乎意料,挺满意了挺满意了. 去年国赛基本都是暴力,最后国三都没拿到(我是 ...

  7. 第十三届蓝桥杯省赛C++B组题解

    写在前面 · 本篇题解对应的是第十三届蓝桥杯省赛C++组的B组的第一场 · 所使用的语言时Python3(其实主要看思路.是什么语言不重要

  8. 第十三届蓝桥杯模拟赛(第三期)试题与题解 C++

    文章目录 第十三届蓝桥杯模拟赛(第三期)试题与题解 1.试题A 题解:数制转换 2.试题B 题解:枚举 3.试题C 题解:枚举 4.试题D 题解:最小生成树 5.试题E 方法一:暴力求和 方法二:一维 ...

  9. 第十三届蓝桥杯国赛真题 PythonB组 复盘以及获奖感言(国一!!!)

    第十三届蓝桥杯国赛真题 PythonB组 复盘以及获奖感言(国一) 文章目录 第十三届蓝桥杯国赛真题 PythonB组 复盘以及获奖感言(国一)

最新文章

  1. Linux下二进制文件安装MySQL
  2. RSA加密解密简单使用
  3. Team Task:DP
  4. 服务器被黑给我上了一课
  5. Keil4编译原子哥的SYSTEM出现错误 Inline assembler not permitted when generating Thumb code
  6. java输出链表的值_[剑指offer] 从尾到头打印链表(三种方法) java
  7. redis入门——服务器篇
  8. mybatis 缓存 一级缓存
  9. jedis 用连接池时超时返回值类型错误
  10. 圆与平面的接触面积_如果把绝对圆的球体放在绝对平的平面上,那接触面是不是无限小?...
  11. 光流(三)--LK算法改进(金字塔LK)
  12. HDOJ-1875-畅通工程再续 解题报告
  13. 测试开发面试题汇总20200422
  14. Hbuilder连接苹果手机
  15. 在计算机网络中ftp服务器的用途是,FTP的作用以及传输文件的一般步骤
  16. 对象存储(Object-based Storage)概述
  17. dlopen与dlsym用法
  18. 零基础学习《计算机操作系统》
  19. html让视频跟图片之间无缝,图片、样式、音视频之间的无缝拼接,教你一个万能方法!...
  20. caffe模型训练与使用(windows平台)

热门文章

  1. Swift Invalid bitcode version (Producer: '802.0.41.0_0' Reader: '800.0.42.1_0')
  2. Navicat Premium模型存储路径
  3. win98系统只能进安全模式的解决方法
  4. htonl、htons头文件
  5. Revit翻模 | 千呼万唤始上架的『图转喷淋』到底妙在哪里?
  6. 更改jupyter的字体为consolas
  7. 版权保护和商标注册有什么关系
  8. 关于阿里矢量图iconfont的应用
  9. 快速清空Excel表格(超级表)
  10. 方舟编译器学习笔记分类与导读