제출 #1131339

#제출 시각아이디문제언어결과실행 시간메모리
113133912345678Ski 2 (JOI24_ski2)C++20
100 / 100
224 ms218952 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long #pragma GCC optimize("O3,unroll-loops") #pragma GCC target("avx2,bmi,bmi2,lzcnt,popcnt") const ll nx=305, inf=1e18; ll n, mv, h[nx], c[nx], dp[nx][nx][nx], cnt[nx], mn[nx], res, ans=inf; pair<pair<ll, ll>, ll> fmn={{inf, inf}, inf}; set<ll> s; map<ll, ll> mp; vector<ll> cmp; int main() { cin.tie(NULL)->sync_with_stdio(false); cin>>n>>mv; for (int i=1; i<=n; i++) cin>>h[i]>>c[i], fmn=min(fmn, {{h[i], c[i]}, i}); int st=fmn.second; for (int i=1; i<=n; i++) if (!(i==st||h[i]>h[st])) res+=(h[st]+1-h[i])*mv, h[i]=h[st]+1; for (int i=1; i<=n; i++) mp[h[i]]++; for (auto [x, y]:mp) { s.insert(x); for (int i=1; i<y; i++) { if (mp.find(x+i)!=mp.end()) { mp[x+i]+=y-i; break; } s.insert(x+i); } } for (auto x:s) cmp.push_back(x); sort(cmp.begin(), cmp.end()); for (int i=0; i<nx; i++) mn[i]=1e18; for (int i=1; i<=n; i++) { ll idx=lower_bound(cmp.begin(), cmp.end(), h[i])-cmp.begin(); mn[idx]=min(mn[idx], c[i]), cnt[idx]++; } //for (int i=0; i<cmp.size(); i++) cout<<"cmp "<<i<<' '<<cmp[i]<<'\n'; for (int i=1; i<nx; i++) mn[i]=min(mn[i], mn[i-1]); for (int i=0; i<cmp.size(); i++) for (int j=0; j<nx; j++) for (int k=0; k<nx; k++) dp[i][j][k]=1e18; cmp.push_back(1e18); for (int i=cmp.size()-2; i>0; i--) { for (int j=0; j<=n; j++) { for (int k=j+1; k<=n; k++) dp[i][j][k]=dp[i+1][cnt[i+1]][k]; if (cmp[i]+1==cmp[i+1]) { ll cur=1e18; for (int k=j; k>=0; k--) { cur=min(cur, dp[i+1][cnt[i+1]+j-k][k]+k*mn[i-1]+(j-k)*mv); dp[i][j][k]=cur-k*mn[i-1]; } } else { for (int k=j; k>=0; k--) dp[i][j][k]=dp[i+1][cnt[i+1]][j]+mn[i-1]*(j-k); } } } cout<<res+dp[1][cnt[1]][1]; }
#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...