Submission #82895

#TimeUsernameProblemLanguageResultExecution timeMemory
82895leejseo매트 (KOI15_mat)C++11
100 / 100
260 ms71444 KiB
#include <bits/stdc++.h> using namespace std; int N, W, ans; int value[3001]; struct cor{ int x, i; bool r; cor(int i_, int x_, bool r_){ i = i_, x = x_; r = r_; } bool operator < (const cor &other) const{ return x < other.x; } }; struct MAT{ int P, L, R, H, K; MAT(int P_, int L_, int R_, int H_, int K_){ P = P_, L = L_, R = R_, H = H_, K = K_; } bool meet(const MAT &MT) const{ if (R <= MT.L || L >= MT.R) return false; if (P == MT.P) return true; return ((MT.H) + H) > W; } bool operator < (const MAT &MT) const{ return R != MT.R ? R < MT.R : L < MT.L; } }; vector<MAT> A; vector<cor> B; int D[3001][6001], Left[3001]; void input(){ cin >> N >> W; int P, L, R, H, K; for (int i=0; i<N; i++){ cin >> P >> L >> R >> H >> K; A.push_back(MAT(P, L, R, H, K)); } } void init(){ sort(A.begin(), A.end()); for (int i=0; i<N; i++){ value[i] = A[i].K; B.push_back(cor(i, A[i].L, false)); B.push_back(cor(i, A[i].R, true)); } sort(B.begin(), B.end()); for (int j=0; j<2*N; j++){ if (B[j].r) continue; Left[B[j].i] = j; } } void solve(){ for (int i=0; i<N; i++){ for (int j=0; j<2*N; j++){ if (A[i].R < B[j].x) break; D[i][j] = A[i].K; if (j > 0) D[i][j] = max(D[i][j], D[i][j-1]); if (B[j].r){ int k = B[j].i; if (A[k].R <= A[i].L){ D[i][j] = max(D[i][j], D[k][j] + A[i].K); } else if (!A[i].meet(A[k])){ if (A[k].L < A[i].L){ int h = upper_bound(B.begin(), B.end(), cor(-1, A[i].L, 0)) - B.begin(); D[i][j] = max(D[i][j], D[k][h-1] + A[i].K); } else{ int h = upper_bound(B.begin(), B.end(), cor(-1, A[k].L, 0)) - B.begin(); D[i][j] = max(D[i][j], D[i][h-1] + A[k].K); } } } ans = max(ans, D[i][j]); } } } int main(){ ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); input(); init(); solve(); cout << ans << endl; }
#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...