Submission #57291

#TimeUsernameProblemLanguageResultExecution timeMemory
57291leejseo매트 (KOI15_mat)C++98
32 / 100
310 ms73552 KiB
#include <bits/stdc++.h> using namespace std; int N, W, ans = 0; typedef 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; } } cor; typedef 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{ if (R != MT.R) return R < MT.R; return L > MT.L; } } MAT; vector<MAT> A; vector<cor> B; int D[3001][6001], Left[3001], Right[3001]; bool M[3001][3001]; void input(){ scanf("%d%d", &N, &W); int P, L, R, H, K; for (int i=0; i<N; i++){ scanf("%d%d%d%d%d", &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++){ 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 i=0; i<N; i++){ for (int j=0; j<N; j++){ if (A[i].meet(A[j])) M[i][j] = 1; } for (int j=0; j<2*N; j++){ if (B[j].i == i){ if (B[j].r) Right[i] = j; else Left[i] = j; } } } } void DP(){ 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(!M[i][k]){ if (A[k].L < A[i].L){ D[i][j] = max(D[i][j], D[k][Left[i]] + A[i].K); } else{ D[i][j] = max(D[i][j], D[i][Left[k]] + A[k].K); } } } ans = max(ans, D[i][j]); } } } int main(void){ input(); init(); DP(); printf("%d\n", ans); }

Compilation message (stderr)

mat.cpp: In function 'void input()':
mat.cpp:39:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%d%d", &N, &W);
  ~~~~~^~~~~~~~~~~~~~~~
mat.cpp:42:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   scanf("%d%d%d%d%d", &P, &L, &R, &H, &K);
   ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#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...