Submission #1131282

#TimeUsernameProblemLanguageResultExecution timeMemory
113128212345678Ski 2 (JOI24_ski2)C++20
42 / 100
156 ms1576 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long const int nx=41, mx=81; ll n, mv, h[nx], ch[nx], c[nx], dp[mx][nx][nx], cnt[mx], mn[mx], res, ans=1e18; ll solve(int i, int j, int k) { if (dp[i][j][k]!=-1) return dp[i][j][k]; if (i==mx-1) return max(j-k, 0)*mn[i-1]; dp[i][j][k]=1e18; for (int l=0; l<=j; l++) { if (j-l<=k) dp[i][j][k]=min(dp[i][j][k], solve(i+1, cnt[i+1]+l, k)+l*mv); else dp[i][j][k]=min(dp[i][j][k], solve(i+1, cnt[i+1]+l, j-l)+mn[i-1]*((j-l)-k)+l*mv); } return dp[i][j][k]; } int main() { cin.tie(NULL)->sync_with_stdio(false); cin>>n>>mv; for (int i=1; i<=n; i++) cin>>h[i]>>c[i]; for (int st=1; st<=n; st++) { res=0; for (int i=1; i<=n; i++) { if (i==st||h[i]>h[st]) ch[i]=h[i]; else ch[i]=h[st]+1, res+=(ch[i]-h[i])*mv; } for (int i=0; i<mx; i++) cnt[i]=0, mn[i]=1e18; for (int i=1; i<=n; i++) mn[ch[i]]=min(mn[ch[i]], c[i]), cnt[ch[i]]++; for (int i=1; i<mx; i++) mn[i]=min(mn[i], mn[i-1]); for (int i=0; i<mx; i++) for (int j=0; j<nx; j++) for (int k=0; k<nx; k++) dp[i][j][k]=-1; ans=min(ans, res+solve(ch[st]+1, cnt[ch[st]+1], 1)); //cout<<"debug "<<st<<' '<<res<<' '<<solve(ch[st]+1, cnt[ch[st]+1], 1)<<'\n'; if (st==3&&0) { for (int i=1; i<=4; i++) for (int j=0; j<=5; j++) for (int k=0; k<=3; k++) cout<<i<<' '<<j<<' '<<k<<' '<<dp[i][j][k]<<'\n'; } } cout<<ans; }
#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...