/ SeriousOJ /

Record Detail

Memory Exceeded


  
# Status Time Cost Memory Cost
#1 Accepted 1ms 764.0 KiB
#2 Accepted 83ms 532.0 KiB
#3 Time Exceeded ≥2098ms ≥532.0 KiB
#4 Time Exceeded ≥2100ms ≥8.297 MiB
#5 Time Exceeded ≥2101ms ≥31.41 MiB
#6 Memory Exceeded ≥2232ms ≥512.016 MiB
#7 Memory Exceeded ≥2237ms ≥512.016 MiB
#8 Memory Exceeded ≥2201ms ≥512.016 MiB
#9 Memory Exceeded ≥2236ms ≥512.016 MiB
#10 Memory Exceeded ≥2236ms ≥512.016 MiB
#11 Memory Exceeded ≥2236ms ≥512.016 MiB
#12 Memory Exceeded ≥2241ms ≥512.016 MiB
#13 Memory Exceeded ≥2233ms ≥512.016 MiB
#14 Memory Exceeded ≥2236ms ≥512.016 MiB
#15 Memory Exceeded ≥2233ms ≥512.016 MiB
#16 Memory Exceeded ≥2234ms ≥512.016 MiB
#17 Memory Exceeded ≥2234ms ≥512.016 MiB
#18 Memory Exceeded ≥2243ms ≥512.016 MiB
#19 Memory Exceeded ≥2233ms ≥512.016 MiB
#20 Memory Exceeded ≥2236ms ≥512.016 MiB

Code

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

ll gcd_(ll a,ll b){
    return b==0? a: gcd_(b,a%b);
}

ll find_min(ll pos,ll n,ll k,vector<ll>&arr){
    vector<ll> dp(n+1,-1);
    if(pos==n)return 0;
    if(dp[pos]!=-1){
        return dp[pos];
    }

    ll min_cost=LONG_LONG_MAX;

    if(pos+1<=n){
        min_cost=min(min_cost,k+find_min(pos+1,n,k,arr));
    }

    for(ll j=pos+1; j<=n; j++){
        ll cost=arr[pos-1]/gcd_(arr[pos-1],arr[j-1]);
        min_cost=min(min_cost,cost+find_min(j,n,k,arr));
    }

    return dp[pos]=min_cost;
}
 
void solve(){
    ll n,k;
    cin>>n>>k;
    vector<ll> arr(n);
    for(ll i=0; i<n; i++)cin>>arr[i];

    ll res=find_min(1,n,k,arr);
    cout<<res<<endl;
}
int main(){
    int t;
    cin>>t;
    while(t--){
        solve();
    }
return 0;
}

Information

Submit By
Type
Submission
Problem
P1099 Which way to go
Contest
Brain Booster #6
Language
C++17 (G++ 13.2.0)
Submit At
2024-10-03 16:59:29
Judged At
2024-10-03 16:59:29
Judged By
Score
10
Total Time
≥2243ms
Peak Memory
≥512.016 MiB