解题思路
题意是指找出一个数作为整个序列的最大值以这个数为中点向左向右递减,找出这样一个数使整个序列的和最大,暴力即可
#include <iostream>
#include <algorithm>
#include <string>
#include <vector>
using namespace std;
const int MAXN = 1e5 + 5;
long long nums[MAXN], ansFinall[MAXN];
int main()
{
long long n, maxn = -99;
cin >> n;
for (int i = 0; i < n; ++i)
{
cin >> nums[i];
}
long long sum = 0, ans = 0, loc = 0;
for (int i = 0; i < n; ++i)
{
maxn = nums[i];
sum = nums[i];
for (int j = i - 1; j >= 0; --j)
{
sum += min(maxn, nums[j]);
maxn = min(maxn, nums[j]);
}
maxn = nums[i];
for (int j = i + 1; j < n; ++j)
{
sum += min(maxn, nums[j]);
maxn = min(maxn, nums[j]);
}
if (sum > ans)
{
loc = i;
ans = sum;
}
}
maxn = nums[loc];
ansFinall[loc] = nums[loc];
for (int i = loc + 1; i < n; ++i)
{
maxn = min(nums[i], maxn);
ansFinall[i] = maxn;
}
maxn = nums[loc];
for (int i = loc - 1; i >= 0; --i)
{
maxn = min(nums[i], maxn);
ansFinall[i] = maxn;
}
for (int i = 0; i < n; ++i)
{
cout << ansFinall[i] << " ";
}
cout << endl;
return 0;
}