제출 #1222377

#제출 시각아이디문제언어결과실행 시간메모리
1222377noyancanturkSki 2 (JOI24_ski2)C++20
5 / 100
156 ms1956 KiB
#include<bits/stdc++.h> using namespace std; #define int int64_t #define pb push_back using pii=pair<int,int>; const int lim=310; #define no INT_MIN int sum(int i,int j){ if(i==no||j==no)return no; return i+j; } int mul(int i,int j){ if(i==no||j==no)return no; return i*j; } int mn(int i,int j){ if(i==no)return j; if(j==no)return i; return min(i,j); } map<int,vector<int>>guys; int dp[2][lim][lim]; signed main(){ int n,K; cin>>n>>K; int a[n],b[n]; for(int i=0;i<n;i++){ cin>>a[i]>>b[i]; guys[a[i]].pb(b[i]); } for(int i=0;i<n;i++){ if(!guys.count(a[i]+1))guys[a[i]+1]=vector<int>(); } map<int,int>nxt; int ppp=-1; for(auto&[x,y]:guys){ nxt[ppp]=x; ppp=x; } nxt[ppp]=INT_MAX; int x=0; for(int i=0;i<lim;i++){ for(int j=0;j<lim;j++){ dp[x][i][j]=no; } } dp[0][0][0]=0; int seen=no; int fr=1; ppp=-1; for(auto&[i,ar]:guys){ if(fr&&!ar.size())continue; x=!x; for(int j=0;j<lim;j++){ for(int k=0;k<lim;k++){ dp[x][j][k]=no; } } if(fr){ dp[x][ar.size()-1][1]=0; fr=0; }else{ for(int j=0;j<lim;j++){ for(int k=0;k<lim;k++){ dp[!x][j][k]=sum(dp[!x][j][k],j*K*(i-ppp)); } } for(int j=0;j<lim;j++){ for(int k=0;k<lim;k++){ int up=j+ar.size(),bel=k; int kk=min(up,bel); up-=kk,bel-=kk; if(up<lim&&bel+kk<lim){ dp[x][up][bel+kk]=mn(dp[x][up][bel+kk],dp[!x][j][k]); } } } int iwant=min(seen/K,nxt[i]-i-1); for(int j=lim-1;0<=j;j--){ for(int k=0;k<lim;k++){ int take=min(iwant,j); if(take&&0<=j-take){ dp[x][j-take][k]=mn(dp[x][j-take][k],sum(dp[x][j][k],K*take*(take+1)/2)); } } } for(int j=lim-2;0<=j;j--){ for(int k=1;k<lim;k++){ dp[x][j][k]=mn(dp[x][j][k],sum(dp[x][j+1][k-1],seen)); } } for(int j=0;j<lim;j++){ for(int k=lim-1;0<=k;k--){ if(j)dp[x][j][k]=mn(dp[x][j][k],dp[x][j-1][k]); if(k+1<lim)dp[x][j][k]=mn(dp[x][j][k],dp[x][j][k+1]); } } } for(int j:ar){ seen=mn(seen,j); } ppp=i; // for(int j=0;j<lim;j++){ // for(int k=0;k<lim;k++){ // cerr<<dp[x][j][k]<<' '; // }cerr<<'\n'; // }cerr<<'\n'; } cout<<dp[x][0][0]<<'\n'; }
#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...