제출 #689685

#제출 시각아이디문제언어결과실행 시간메모리
689685saayan007Discharging (NOI20_discharging)C++17
0 / 100
1073 ms1048576 KiB
#include <bits/stdc++.h>
using namespace std;

using ll = long long;
using pi = pair<int, int>;
using pl = pair<long long, long long>;
using vi = vector<int>;
using vl = vector<long long>;
using vpi = vector<pair<int, int>>;
using vpl = vector<pair<long long, long long>>;

#define fur(i, a, b) for(ll i = a; i <= (ll)b; ++i)
#define ruf(i, a, b) for(ll i = a; i >= (ll)b; --i)
#define fr first 
#define sc second
#define mp make_pair
#define pb push_back
#define eb emplace_back
#define nl "\n"
#define all(x) (x).begin(),(x).end()
#define rall(x) (x).rbegin(),(x).rend()

const ll inf = 1e18L;

int main() 
{
    ios::sync_with_stdio(0);
    cin.tie(0);

    ll n;
    cin >> n;
    ll t[n + 1];
    fur(i, 1, n) {
        cin >> t[i];
    }

    ll dp[n + 1][n + 1];
    fur(i, 0, n) {
        fur(j, 0, n) {
            dp[i][j] = inf;
        }
    }

    ll res = inf;
    fur(i, 1, n) {
        dp[i][0] = t[n] * n;
        res = min(res, dp[i][0]);
    }

    fur(j, 1, n - 1) {
        fur(i, 1, n) {
            ruf(x, i - 1, 1) {
                dp[i][j] = min(dp[i][j], dp[x][j] - t[n] * (n - x + 1) + t[i - 1] * (i - x) + t[n]*(n - i + 1));
            }
            res = min(res, dp[i][j]);
        }
    }

    cout << res << nl;

    return 0;
    if(n == 1) {
        cout << t[1] << nl;
    } 
    else if(n == 2) {
        cout << min(2*max(t[1], t[2]), 2*t[1] + t[2]) << nl;
    }
    if(n == 3) {
        ll ans = inf;
        // 00
        ans = min(ans, 3*max({t[1],t[2],t[3]}));

        //01
        ans = min(ans, 3*max(t[1], t[2]) + t[3]);

        // 10
        ans = min(ans, 3*t[1] + 2*max(t[2], t[3]));

        // 11
        ans = min(ans, 3*t[1] + 2*t[2] + t[3]);

        cout << ans << nl;
    }
}
#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...