제출 #1156644

#제출 시각아이디문제언어결과실행 시간메모리
1156644guagua0407Ski 2 (JOI24_ski2)C++20
0 / 100
25 ms4676 KiB
//#pragma GCC optimize("O3") #include <bits/stdc++.h> using namespace std; #define ll long long #define int ll #define pii pair<int,int> #define f first #define s second #define all(x) x.begin(),x.end() #define _ ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); int dx[4]={0,0,1,-1}; int dy[4]={1,-1,0,0}; void setIO(string s) { freopen((s + ".in").c_str(), "r", stdin); freopen((s + ".out").c_str(), "w", stdout); } const ll inf=(ll)1e18; const int mxn=305; vector<vector<ll>> dp(mxn,vector<ll>(mxn,inf)); vector<vector<ll>> mn(mxn,vector<ll>(mxn,inf)); vector<vector<ll>> mn2(mxn,vector<ll>(mxn,inf)); signed main() {_ int n,K; cin>>n>>K; vector<int> c(n),h(n); vector<int> pre(mxn*2); for(int i=0;i<n;i++){ cin>>h[i]>>c[i]; } ll ans=0; int mnh=*min_element(all(h)); ll mnc=inf; for(int i=0;i<n;i++){ if(h[i]==mnh) mnc=min(mnc,c[i]); } int pos; for(int i=0;i<n;i++){ if(h[i]==mnh and c[i]==mnc) pos=i; } for(int i=0;i<n;i++){ if(h[i]==mnh and i!=pos){ h[i]++; ans+=K; } } for(int i=0;i<n;i++){ pre[h[i]]++; } for(int i=1;i<mxn*2;i++){ pre[i]+=pre[i-1]; } vector<vector<ll>> dpn(mxn,vector<ll>(mxn,inf)); vector<vector<ll>> mnn(mxn,vector<ll>(mxn,inf)); vector<vector<ll>> mn2n(mxn,vector<ll>(mxn,inf)); ll mnans=inf; for(int i=0;i<5;i++){ if(i==0){ dpn[1][1]=0; } else{ for(int j=0;j<=pre[i];j++){ for(int k=0;k<=j;k++){ dpn[j][k]=min(mn[j-k][k]+k*mnc+(pre[i]-j)*K,mn2[j][k]+(pre[i]-j)*K); } } } for(int j=0;j<=n;j++){ mnn[j][0]=dpn[j][0]; for(int k=1;k<=n;k++){ mnn[j][k]=min(dpn[j][k]-k*mnc,mnn[j][k-1]); } } for(int k=0;k<=n;k++){ multiset<ll> S; for(int j=0;j<=n;j++){ S.insert(dpn[j][k]); if(j-k-1>=0) S.erase(S.find(dpn[j-k-1][k])); mn2n[j][k]=*S.begin(); } } for(int j=0;j<=n;j++){ for(int k=0;k<=n;k++){ dp[j][k]=dpn[j][k]; mn[j][k]=mnn[j][k]; mn2[j][k]=mn2n[j][k]; dpn[j][k]=inf; mnn[j][k]=inf; mn2n[j][k]=inf; //cout<<i<<' '<<j<<' '<<k<<' '<<dp[j][k]<<'\n'; } } for(int k=0;k<=n;k++){ mnans=min(mnans,dp[n][k]); } } cout<<mnans+ans<<'\n'; return 0; } //maybe its multiset not set //yeeorz //diaoborz // dp(i-1,j,k)->dp(i,j+a,max(a,k)) // dp(i,j,k)=dp(i-1,j-k,k'<=k)+(k-k')*mn+(pre[i]-j)*k // dp(i,j,k)=dp(i-1,j-(a<=k),k)+(pre[i]-j)*k

컴파일 시 표준 에러 (stderr) 메시지

Main.cpp: In function 'void setIO(std::string)':
Main.cpp:16:12: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   16 |     freopen((s + ".in").c_str(), "r", stdin);
      |     ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Main.cpp:17:12: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   17 |     freopen((s + ".out").c_str(), "w", stdout);
      |     ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#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...