正经题解|变换数字
2024-04-01 16:41:58
发布于:浙江
56阅读
0回复
0点赞
题目大意
给你 个数,只包含 与 。
可以操作一次,选择一个区间 一定要选择。
将区间内的 变为 , 变为 。
题意分析
问操作一次后,最多剩余多少个 。
解题思路
我们可以记一下原序列每个区间 的数量,这个时候你应该要能想到前缀和。
用前缀和记录 1 ~ n
之间 的数量,用数组 记录。
既然我能够知道每个区间 的数量,就能推算出 的数量。
比如我现在选择一个区间 ,那么这个区间 的数量就是,。
最后我们可以枚举所有的区间情况。
时间复杂度分析
求前缀和
枚举区间
代码演示
#include <bits/stdc++.h>
using namespace std;
const int N = 3000;
int x;
int sum[N];
int main() {
int n;
cin >> n;
int ans = 0;
for(int i=1;i<=n;i++) {
cin >> x;
sum[i] = sum[i-1] + x;
}
for(int i=1;i<=n;i++) {
for(int j=i;j<=n;j++) {
int cnt = sum[i-1];
cnt += (j - i + 1) - (sum[j] - sum[i-1]);
cnt += sum[n] - sum[j];
ans = max(ans,cnt);
}
}
cout << ans << endl;
return 0;
}
这里空空如也
有帮助,赞一个