제출 #639280

#제출 시각아이디문제언어결과실행 시간메모리
639280slime카니발 티켓 (IOI20_tickets)C++14
39 / 100
3072 ms2097152 KiB
#include "tickets.h" #include "bits/stdc++.h" using namespace std; long long find_maximum(int k, std::vector<std::vector<int>> x) { int n = x.size(); int m = x[0].size(); std::vector<std::vector<int>> answer; for (int i = 0; i < n; i++) { std::vector<int> row(m); for (int j = 0; j < m; j++) { row[j] = -1; } answer.push_back(row); } long long ps[n+1][m+1]; for(int i=0; i<=n; i++) { for(int j=0; j<=m; j++) { ps[i][j] = 0; } } for(int i=1; i<=n; i++) { for(int j=1; j<=m; j++) { ps[i][j] = ps[i][j-1] + x[i-1][j-1]; } } long long dp[n+1][n*k/2 + 1]; for(int i=0; i<=n; i++) { for(int j=0; j<=n*k/2; j++) { dp[i][j] = -1e16; } } dp[0][0] = 0; for(int i=1; i<=n; i++) { for(int j=0; j<=n*k/2; j++) { for(int elev=0; elev<=min(j, k); elev++) { dp[i][j] = max(dp[i][j], dp[i-1][j - elev] - ps[i][k-elev] + ps[i][m] - ps[i][m-elev]); } } } int cur = n*k/2; for(int i=n; i>=1; i--) { for(int elev=0; elev<=min(cur, k); elev++) { if(dp[i-1][cur-elev] - ps[i][k-elev] + ps[i][m] - ps[i][m-elev] == dp[i][cur]) { for(int j=m-elev; j<m; j++) answer[i-1][j] = 1; // to add for(int j=0; j<k-elev; j++) answer[i-1][j] = -2; // to subtract cur -= elev; break; } } } int nxt = 0; for(int i=0; i<n; i++) { for(int j=0; j<m; j++) { if(answer[i][j] == 1) { answer[i][j] = nxt; nxt = (nxt + 1) % k; } } } for(int i=0; i<n; i++) { bool bruh[m]; for(int j=0; j<m; j++) bruh[j] = 0; for(int j=0; j<m; j++) if(answer[i][j] >= 0) bruh[answer[i][j]] = 1; nxt = 0; for(int j=0; j<m; j++) { if(answer[i][j] == -2) { while(bruh[nxt]) nxt++; bruh[nxt] = 1; answer[i][j] = nxt; } } } allocate_tickets(answer); return dp[n][n*k/2]; }
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...