/ SeriousOJ /

Record Detail

Memory Exceeded


  
# Status Time Cost Memory Cost
#1 Accepted 1ms 540.0 KiB
#2 Accepted 499ms 864.0 KiB
#3 Accepted 564ms 848.0 KiB
#4 Accepted 656ms 3.445 MiB
#5 Accepted 1035ms 29.73 MiB
#6 Memory Exceeded ≥307ms ≥256.016 MiB
#7 Memory Exceeded ≥359ms ≥256.016 MiB
#8 Memory Exceeded ≥301ms ≥256.016 MiB
#9 Memory Exceeded ≥292ms ≥256.016 MiB
#10 Memory Exceeded ≥337ms ≥256.016 MiB
#11 Memory Exceeded ≥285ms ≥256.016 MiB
#12 Memory Exceeded ≥282ms ≥256.016 MiB
#13 Memory Exceeded ≥559ms ≥256.016 MiB
#14 Memory Exceeded ≥344ms ≥256.016 MiB
#15 Memory Exceeded ≥270ms ≥256.016 MiB
#16 Memory Exceeded ≥269ms ≥256.016 MiB
#17 Accepted 252ms 90.184 MiB
#18 Accepted 165ms 11.91 MiB
#19 Accepted 358ms 14.523 MiB
#20 Memory Exceeded ≥317ms ≥256.016 MiB

Code

/*
 *   Copyright (c) 2024 Emon Thakur
 *   All rights reserved.
 */
#include<bits/stdc++.h>
using namespace std;
using ll = long long;

#define fr freopen("input19.txt","r",stdin)
//ofstream file("output19.txt");

void solve()
{
    ll n; cin>>n;
    ll a[n];
    for(int i=0;i<n;i++) cin>>a[i];
    ll m = 20;
    vector<vector<vector<ll>>> dp(m,vector<vector<ll>>(n+1,vector<ll>(4,1e17)));
    
    // first column
    for(ll i=0;i<m;i++) dp[i][0][0] = a[0]*i;
    
    // second column 
    dp[0][1][0] = dp[1][0][0]; dp[0][1][1] = 1; dp[0][1][2] = dp[2][0][0]; dp[0][1][3] = 2; // first row
    dp[1][1][0] = 0 + a[1]; dp[1][1][1] = 0; dp[1][1][2] = a[1]+dp[2][0][0];  dp[1][1][3] = 2; // second row
    for(ll i=2;i<m;i++)
    {
        dp[i][1][0] = a[1]*i;
        dp[i][1][1] = 0;
        dp[i][1][2] = a[1]*i + a[0];
        dp[i][1][3] = 1;
    }
    //dp
    for(ll col=2;col<n;col++)
    {
        for(ll i=0;i<m;i++)
        {
            // dp[i][col][0] and dp[i][col][1];
            for(ll j=0;j<m;j++)
            {
                if(i==j) continue;
                if(dp[j][col-1][0] < dp[i][col][0] && dp[j][col-1][1] != i)
                {
                    dp[i][col][0] = dp[j][col-1][0];
                    dp[i][col][1] = j;
                }
                if(dp[j][col-1][2] < dp[i][col][0] && dp[j][col-1][3] != i)
                {
                    dp[i][col][0] = dp[j][col-1][2];
                    dp[i][col][1] = j;
                }
            }

            ll k = dp[i][col][1];
            // dp[i][col][2] and dp[i][col][3];
            for(ll j=0;j<m;j++)
            {
                if(j==i || j==k) continue;
                if(dp[j][col-1][0] < dp[i][col][2] && dp[j][col-1][1] != i)
                {
                    dp[i][col][2] = dp[j][col-1][0];
                    dp[i][col][3] = j;
                }
                if(dp[j][col-1][2] < dp[i][col][2] && dp[j][col-1][3] != i)
                {
                    dp[i][col][2] = dp[j][col-1][2];
                    dp[i][col][3] = j;
                }
            }

            dp[i][col][0] += a[col]*i;
            dp[i][col][2] += a[col]*i;
        }
    }

    ll ans = 1e18;
    for(int i=0;i<m;i++)
    {
        ans = min({ans , dp[i][n-1][0], dp[i][n-1][2]});
    }
    cout<<ans<<endl;
    //file<<ans<<endl;

}
int main()
{
    //fr;
    int t; cin>>t; while(t--) solve();
}

Information

Submit By
Type
Submission
Problem
P1087 Face the monsters
Language
C++20 (G++ 13.2.0)
Submit At
2024-08-12 19:57:23
Judged At
2024-08-12 19:57:23
Judged By
Score
40
Total Time
≥1035ms
Peak Memory
≥256.016 MiB