Submission #133246

#TimeUsernameProblemLanguageResultExecution timeMemory
133246E869120Olympiads (BOI19_olympiads)C++14
44 / 100
2065 ms249324 KiB
#include <iostream> #include <vector> #include <algorithm> #include <queue> #include <functional> #include <map> using namespace std; int N, K, C, A[509][6]; priority_queue<pair<int, vector<int>>>Q; map<vector<int>, int> Map; int calc(vector<int> L) { int R[6] = { 0, 0, 0, 0, 0, 0 }; for (int i = 0; i < L.size(); i++) { for (int j = 0; j < K; j++) R[j] = max(R[j], A[L[i]][j]); } int sum = 0; for (int i = 0; i < K; i++) sum += R[i]; return sum; } int main() { cin >> N >> K >> C; for (int i = 0; i < N; i++) { for (int j = 0; j < K; j++) cin >> A[i][j]; } vector<int>E; for (int i = 0; i < K; i++) { int maxn = -1, maxid = -1; for (int j = 0; j < N; j++) { if (maxn < A[j][i]) { maxn = A[j][i]; maxid = j; } } E.push_back(maxid); } sort(E.begin(), E.end()); E.erase(unique(E.begin(), E.end()), E.end()); for (int i = 0; i < N; i++) { if (E.size() == K) break; E.push_back(i); sort(E.begin(), E.end()); E.erase(unique(E.begin(), E.end()), E.end()); } Q.push(make_pair(calc(E), E)); Map[E] = 1; int ret = 0; for (int i = 1; i <= C; i++) { vector<int> F = Q.top().second; ret = Q.top().first; Q.pop(); for (int j = 0; j < F.size(); j++) { for (int k = 0; k < N; k++) { vector<int> G = F; G[j] = k; sort(G.begin(), G.end()); G.erase(unique(G.begin(), G.end()), G.end()); if (G.size() != K) continue; if (Map[G] == 1) continue; Map[G] = 1; int Z = calc(G); Q.push(make_pair(Z, G)); } } } cout << ret << endl; return 0; }

Compilation message (stderr)

olympiads.cpp: In function 'int calc(std::vector<int>)':
olympiads.cpp:15:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for (int i = 0; i < L.size(); i++) {
                  ~~^~~~~~~~~~
olympiads.cpp: In function 'int main()':
olympiads.cpp:40:16: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   if (E.size() == K) break;
       ~~~~~~~~~^~~~
olympiads.cpp:54:21: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for (int j = 0; j < F.size(); j++) {
                   ~~^~~~~~~~~~
olympiads.cpp:59:18: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     if (G.size() != K) continue;
         ~~~~~~~~~^~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...