Submission #124482

#TimeUsernameProblemLanguageResultExecution timeMemory
124482DJ035요리 강좌 (KOI17_cook)C++14
56 / 100
1049 ms97212 KiB
#include <bits/stdc++.h> using namespace std; const int N = 3005; #define ll long long ll cost[N][N]; ll dp[N][N]; int ban[N]; ll val[N]; queue<ll> q[N]; set<pair<ll,int> > s[N]; int main(){ int n,m,S,e,t,i; ios::sync_with_stdio(false); cin.tie(0); cin>>n>>m>>S>>e>>t; int j; for(i=1;i<=n;++i) for(j=1;j<=m;++j){ cin>>cost[i][j]; } for(i=1;i<=n;++i) for(j=1;j<=m;++j){ dp[i][j]= 1e13; } for(i=1;i<=n;++i) cin>>ban[i]; set<pair<ll,int> >v; set<pair<ll,int> >::iterator it; int id; for(int IND = 1;IND<=m;++IND){ v.clear(); for(id = 1;id<=n;++id){ v.insert(make_pair(dp[id][IND-1],id)); if(v.size()>3)v.erase(*v.rbegin()); } for(id=1;id<=n;++id){ for(it = v.begin();it!= v.end();++it){ if( (*it).second== id || (*it).second == ban[id]) continue; q[id].push((*it).first - val[id]); break; } if(q[id].size()==S){ s[id].insert( make_pair(q[id].front(),IND-S)); q[id].pop(); } while((int)s[id].size()>0){ int len = (*s[id].begin()).second; len = IND- len; if(len>e){ s[id].erase(s[id].begin()); } else break; } val[id]+= cost[id][IND]; if(s[id].size()>0){ dp[id][IND]= val[id] + (*s[id].begin()).first + t; dp[id][IND]= min(dp[id][IND],(ll)1e13); if(IND==m){ dp[id][IND]-=t; while(!q[id].empty()){ dp[id][IND] = min(dp[id][IND], q[id].front() +val[id]); q[id].pop(); } } } } } ll ret = 1e13; for(i=1;i<=n;++i) ret= min(ret, dp[i][m]); cout<<ret<<'\n'; }

Compilation message (stderr)

cook.cpp: In function 'int main()':
cook.cpp:127:28: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
             if(q[id].size()==S){
                ~~~~~~~~~~~~^~~
#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...