Submission #1157089

#TimeUsernameProblemLanguageResultExecution timeMemory
1157089vako_pOlympiads (BOI19_olympiads)C++20
100 / 100
6 ms8260 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long #define pb push_back #define debug(x) cerr << '\n' << (#x) << " is " << (x) << " -> line: " << __LINE__ << endl; //#define cerr if(false) cerr const int mxN = 2e4; ll n,k,c,a[mxN][10],x[mxN][10],idx[mxN],curr,val[mxN],mx,par[mxN]; bool ban[mxN][505],vis[mxN][505]; priority_queue<pair<ll,ll>, vector<pair<ll,ll>>> q; vector<pair<ll,ll>> v[10]; map<vector<ll>,bool> mp; void f(ll at){ ll cnt = 0; for(int j = 0; j < n; j++) cnt += 1 - ban[at][j]; if(cnt <= k) return; for(int i = idx[at]; i < k; i++){ curr++; par[curr] = at; idx[curr] = i; for(int j = 0; j < n; j++) ban[curr][j] = ban[at][j]; for(int j = 0; j < i; j++){ x[curr][j] = x[at][j]; vis[curr][x[at][j]] = true; } ban[curr][x[at][i]] = true; for(int j = i; j < k; j++){ for(auto it : v[j]){ if(vis[curr][it.second] or ban[curr][it.second]) continue; vis[curr][it.second] = true; x[curr][j] = it.second; break; } } for(int j = 0; j < k; j++){ mx = 0; for(int j1 = 0; j1 < k; j1++) mx = max(mx, a[x[curr][j1]][j]); val[curr] += mx; } q.push({val[curr], curr}); } } int main(){ ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); cin >> n >> k >> c; for(int i = 0; i < n; i++){ for(int j = 0; j < k; j++){ cin >> a[i][j]; v[j].pb({a[i][j], i}); } } for(int j = 0; j < k; j++){ sort(v[j].begin(), v[j].end()); reverse(v[j].begin(), v[j].end()); for(auto it : v[j]){ if(vis[curr][it.second]) continue; vis[curr][it.second] = true; val[curr] += v[j][0].first; x[curr][j] = it.second; break; } } q.push({val[curr], curr}); vector<ll> vv; while(!q.empty()){ ll at = q.top().second; q.pop(); c--; if(!c){ cout << val[at] << '\n'; break; } f(at); } } //12 4 100 //7 0 4 9 //3 0 8 4 //1 1 3 7 //5 1 3 4 //4 2 2 9 //7 0 4 9 //3 0 8 4 //1 1 3 7 //5 1 3 4 //4 2 2 9 //1 3 9 4 //1 9 0 9
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...