专栏文章
题解:CF2124B Minimise Sum
CF2124B题解参与者 1已保存评论 0
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @mioxlefm
- 此快照首次捕获于
- 2025/12/03 02:48 3 个月前
- 此快照最后确认于
- 2025/12/03 02:48 3 个月前
简要题意
给出一个长度为 的数组,保证 都有 。你最多只能对其进行一次操作(也可以选择不操作),选择两个下标 且要求 ,使
a[i]+=a[j],之后将 的值设为 。请最小化该数组的前缀最小值之和。思路
考虑到我们可以将 设为 ,那么 之后的所有前缀最小值都会变为 ,那么我们希望 的位置尽可能的前。
当然前进是有限度的,我们最前也只能将 设为 ,因此对于数组第一项 ,其前缀最小值 是必须要加上的。
若 ,我们不妨令 ,这样 以后的所有前缀最小值都会变为 ,那么总答案即为 。
若 ,那么前缀最小值的第二项仍为 ,我们不需要再增加 了,直接令 ,这样总答案为 。
容易证明这就是最优解(读者可以尝试思考原因)。
因此,我们得知答案即为 。
CPP#include <bits/stdc++.h>
using namespace std;
int t, n, a[200005];
int main()
{
cin >> t;
while (t--)
{
cin >> n;
for (int i = 1; i <= n; i++) cin >> a[i];
cout << min(a[1], a[2]) + a[1] << endl;
}
}
相关推荐
评论
共 0 条评论,欢迎与作者交流。
正在加载评论...