window.cnblogsConfig = {//可以放多张照片,应该是在每一个博文上面的图片,如果是多张的话,那么就随机换的。 homeTopImg: [ "https://cdn.luogu.com.cn/upload/image_hosting/xkzro04i.png" ], }

AtCoder ABC 263 D 题解

AtCoder ABC 263 D 题解

前言

本蒟蒻的第一篇题解,大佬勿喷 QwQ


传送门们

洛谷传送门

AtCoder 传送门


正文

设有 \(x\) 使得 \(x\leq k\) 时,令 \(f(k)\) 为对 \(A'\) 进行运算后 \(A'=(A_1,A_2,\ldots,A_k)\) 的最小和。

同理,对于 \(y\) 使得 \(y\leq k\) 时,令 \(g(k)\) 为对 \(A''\) 进行运算后 \(A''=(A_{N-k+1},\ldots,A_N)\) 的最小和。

如果我们能求出 \(f(0),f(1),\ldots,f(N),g(0),g(1),\ldots,g(N)\),那么答案就是 \(\min(f(i)+g(N-i))\)

我们设 \(f(0)=0\)。要想求得 \(f(k+1)\),我们需要先求得 \(f(k)\)。这取决于是否有 \(x<k+1\)

分类讨论

  • 如果 \(x<k+1\),则最小和为 \(f(k)+A_{k+1}\)

  • 如果 \(x=k+1\),则最小和为 \(L(k+1)\)

因此,我们可以求得 \(f(k+1)=\min(f(k)+A_{k+1},L(k+1))\)

同理可求得 \(g(k)\),时间复杂度 \(\mathrm{O}(N)\)


AC Code

#include <iostream>
#include <algorithm>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int n, l, r;
cin >> n >> l >> r;
long long pre = 0, ans = 1LL * r * n;
for(int i = 1, a; i <= n; ++i) {
cin >> a;
pre = min(pre + a, 1LL * i * l);
ans = min(ans, pre + 1LL * (n - i) * r);
}
cout << ans;
return 0;
}

__EOF__

本文作者TigerTanWQY
本文链接https://www.cnblogs.com/TigerTanWQY/p/18012594.html
关于博主:GD-SZ 初一蒟蒻,明年拿下六级勾
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   TigerTanWQY  阅读(22)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示