Submission #130119

#TimeUsernameProblemLanguageResultExecution timeMemory
130119aer0park요리 강좌 (KOI17_cook)C++14
0 / 100
3 ms1272 KiB
#include <bits/stdc++.h> #define f first #define s second using namespace std; typedef long long ll; typedef pair<ll,ll> pi; ll n,m,s,e,t,mnc[3005],anw=1e15; ll dp[3005][3005]; // i번쨰 학원에서 j번 강좌까지를 끝마쳤을때 최소비용 즉 무조건 학원바꿈 int ck[3005][3005],x[3005],c[3005][3005],pc[3005][3005]; // c:i번쨰 학원에서 j번강좌를 들을 경우 비용 pc:i번쨰 학원에서 j번강좌까지를 들을 경우 비용 int main() { ios::sync_with_stdio(false); cin.tie(NULL); cin>>n>>m>>s>>e>>t; for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) cin>>c[i][j],pc[i][j]=pc[i][j-1]+c[i][j]; for(int i=1;i<=n;i++) cin>>x[i]; for(int i=0;i<=n;i++) for(int j=0;j<=m;j++) dp[i][j]=1e15; for(int i=1;i<=n;i++) dp[i][0]=-t; for(int i=0;i<=m;i++) { ll nw=min(m,i+s); if(i&&i+s<=m) { for(int j=1;j<=n;j++) if(ck[j][nw-1]) ck[j][nw]=ck[j][nw-1]-1,dp[j][nw]=dp[j][nw-1]+c[j][nw]; } vector<pi> ar; for(int j=1;j<=n;j++) ar.push_back({dp[j][i]+t,j}); sort(ar.begin(),ar.end()); for(int j=1;j<=n;j++) { ll k=0; while(ar[k].s==x[j]||ar[k].s==j) k++; mnc[j]=ar[k].f; } for(int j=1;j<=n;j++) if(dp[j][nw]>mnc[j]+pc[j][nw]-pc[j][i]) dp[j][nw]=mnc[j]+pc[j][nw]-pc[j][i],ck[j][nw]=e-s; } for(int i=1;i<=n;i++) anw=min(anw,dp[i][m]); cout<<anw; return 0; }
#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...