Submission #1314835

#TimeUsernameProblemLanguageResultExecution timeMemory
1314835cubedDischarging (NOI20_discharging)C++20
36 / 100
566 ms1114112 KiB
#include <bits/stdc++.h>
using namespace std;

#define endl '\n'
#define f first
// #define s second
#define pb(x) push_back(x)
#define int long long
 
const int MOD = 1e9+7;
const int inf = 1e9;
const int INF = 1e18+20;
const int LOG = 25;

int n;
vector<vector<int>> mx;
vector<int> dp;

int solve (int i) {
    if (i==n) return 0;

    if (dp[i]!=-1) return dp[i];
    int ans = INF;

    for (int j=i; j<n; j++) {
        ans = min(ans, mx[i][j]*(n-i) + solve(j+1));
    }

    return dp[i] = ans;
}

void solve() {
    cin>>n;

    vector<int> a(n);
    for (int i=0; i<n; i++) cin>>a[i];

    mx.resize(n, vector<int>(n));
    dp.resize(n+1, -1);

    for (int i=0; i<n; i++) {
        int mxi = a[i];
        for (int j=i; j<n; j++) {
            mxi = max(mxi, a[j]);
            mx[i][j] = mxi;
        }
    }

    cout<<solve(0);
}

bool multi=false;

int32_t main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    

    int t=1;
    if (multi) cin>>t;
 
    while (t--) solve();
 
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...