通过最多平方一个元素来找到最大的子数组总和

时间:2019-05-24 14:04:31

标签: c++

为您提供了一个整数数组。您必须从数组中选择一个整数,将其平方,然后返回在结果数组的所有子数组中具有最大和的子数组的和。 您必须选择一个整数,以使最终答案最大化。 注意:子数组的总和是该子数组中所有整数的总和。

输入格式 第一行:n表示数组的长度
第二行:数组A的n个以空格分隔的整数

输出格式

在一行中,打印一个整数,该整数表示将一个整数更改为平方后的所有子数组中具有最大和的子数组的总和。

输入约束 1<=n<=500000 -10000000 <= A [i] <= 10000000

#include <bits/stdc++.h>
using namespace std;

long long solution(int n, vector<long long> arr)
{
    long long i, j, maxi = 0;
    long long f[n];
    for (j = 0; j < n; j++) {
        if (j == 0) {
            f[j] = arr[j];
            continue;
        }

        if (f[j - 1] + arr[j] > 0)
            f[j] = f[j - 1] + arr[j];
        else
            f[j] = 0;

        maxi = max(maxi, f[j]);
    }

    for (i = 0; i < n; i++) {
        arr[i] = arr[i] * arr[i];
        long long s[n];
        for (j = i; j < n; j++) {
            if (j == i) {
                if (j == 0) {
                    s[j] = arr[j];
                    continue;
                }

                if (f[j - 1] + arr[i] > 0)
                    s[j] = f[j - 1] + arr[i];
                else
                    s[j] = 0;

                continue;
            }

            if (s[j - 1] + arr[j] > 0)
                s[j] = s[j - 1] + arr[j];
            else {
                s[j] = 0;
                break;
            }

            maxi = max(maxi, s[j]);
        }
    }

    return maxi;
}

int main()
{

    ios::sync_with_stdio(0);
    cin.tie(0);
    int n;
    cin >> n;
    vector<long long> Arr(n);
    for (int i_Arr = 0; i_Arr < n; i_Arr++) {
        cin >> Arr[i_Arr];
    }

    long long out_;
    out_ = solution(n, Arr);
    cout << out_;
}

我要获得TLE

0 个答案:

没有答案