제출 #988470

#제출 시각아이디문제언어결과실행 시간메모리
988470amirhoseinfar1385Ski 2 (JOI24_ski2)C++17
100 / 100
773 ms3672 KiB
//#pragma GCC optimize("O3,unroll-loops") //#pragma GCC target("avx2") #include<bits/stdc++.h> using namespace std; const long long maxn=305,maxh=606; long long n,k,mn[maxn],sum[maxn],cnt[maxn],vis[maxn],inf=1e17,last[maxn],suf[maxn]; long long dp[2][maxn+10][maxn*2+10],mid=maxn+2; vector<pair<long long ,long long>>all; bool cmp(pair<long long ,long long> a,pair<long long ,long long> b){ if(a.first!=b.first){ return a.first<b.first; } return a.second<b.second; } long long fres=0; void vorod(){ cin>>n>>k; if(n==1){ cout<<0<<endl; exit(0); } all.resize(n); for(long long i=0;i<n;i++){ cin>>all[i].first>>all[i].second; all[i].first++; } sort(all.begin(),all.end(),cmp); for(long long i=1;i<n;i++){ if(all[i].first==all[0].first){ all[i].first++; fres+=k; } } for(int i=1;i<n;i++){ all[i].first-=all[0].first; } all[0].first=0; long long ted=1; vector<long long>fa(n); fa[0]=all[0].first; for(int i=1;i<n;i++){ if(all[i].first!=all[i-1].first){ fa[i]=fa[i-1]+min(ted,all[i].first-all[i-1].first); ted=1+max(0ll,ted-(all[i].first-all[i-1].first)); }else{ ted++; fa[i]=fa[i-1]; } } for(int i=0;i<n;i++){ all[i].first=fa[i]+1; } for(long long i=0;i<maxn;i++){ mn[i]=inf; } for(long long i=0;i<n;i++){ mn[all[i].first]=min(mn[all[i].first],all[i].second); cnt[all[i].first]++; } suf[maxn-1]=cnt[maxn-1]; for(int i=maxn-2;i>=0;i--){ suf[i]=suf[i+1]+cnt[i]; } for(long long i=1;i<maxn;i++){ mn[i]=min(mn[i],mn[i-1]); } } void solve(){ for(long long i=0;i<2;i++){ for(long long j=0;j<maxn;j++){ for(long long h=0;h<maxn;h++){ dp[i][j][h]=inf; } } } dp[1][cnt[all[1].first]][1]=0; long long mainres=inf; for(long long i=all[1].first;i<maxn-1;i++){ for(long long j=0;j<maxn;j++){ for(long long h=0;h<maxn;h++){ if(dp[1][j][h]==inf){ continue; } if(suf[i+1]==0&&j==0){ mainres=min(mainres,dp[1][j][h]); //continue; } for(long long z=1-(j==0);z<=j;z++){ long long fake=max(0ll,z-h)*mn[i-1]+(j-z)*k; dp[0][cnt[i+1]+(j-z)][max(0ll,h-z)+z]=min(dp[0][cnt[i+1]+(j-z)][max(0ll,h-z)+z],dp[1][j][h]+fake); } } } for(long long j=0;j<maxn;j++){ for(long long h=0;h<maxn;h++){ swap(dp[1][j][h],dp[0][j][h]); dp[0][j][h]=inf; } } } // for(long long i=0;i<maxn;i++){ // mainres=min(mainres,dp[1][0][i]); // } mainres+=fres; cout<<mainres<<endl; } int main(){ ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); // freopen("inp.txt","r",stdin); vorod(); // pre(); solve(); // khor(); }
#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...