제출 #770199

#제출 시각아이디문제언어결과실행 시간메모리
770199jlallas384메기 농장 (IOI22_fish)C++17
9 / 100
44 ms14796 KiB
#include "fish.h" #include <bits/stdc++.h> using namespace std; using ll = long long; long long max_weights(int n, int m, vector<int> x, vector<int> y, vector<int> w) { vector<vector<int>> g(5, vector<int>(n + 2)); for(int i = 0; i < m; i++){ g[y[i] + 1][x[i] + 1] = w[i]; } vector<vector<ll>> dpl(5, vector<ll>(n + 1, -1e9)), dpr(5, vector<ll>(n + 1, -1e9)); // dp1 = take left only, dp2 = take left and right dpl[0][0] = dpr[0][0] = 0; ll pre = 0; ll ans = 0; for(int i = 1; i <= n; i++){ ll ls = 0, rs = 0; ll rsub = 0; if(i >= 3){ for(int j = 0; j <= 2; j++){ pre = max({pre, dpl[j][i - 3], dpr[j][i - 3]}); } } for(int j = 0; j <= 2; j++){ ls += g[j][i - 1]; rs += g[j][i + 1]; rsub += g[j][i]; ll sub = 0; for(int k = 0; k <= j; k++){ sub += g[k][i - 1]; dpl[j][i] = max(dpl[j][i], dpl[k][i - 1] + ls - sub); dpr[j][i] = max(dpr[j][i], dpl[k][i - 1] + ls + rs - sub); } for(int k = j; k <= 2; k++){ dpr[j][i] = max(dpr[j][i], dpr[k][i - 1] + rs - rsub); } if(i >= 2){ sub = 0; for(int k = 0; k <= j; k++){ sub += g[k][i - 1]; dpl[j][i] = max(dpl[j][i], dpr[k][i - 2] + ls - sub); dpr[j][i] = max(dpr[j][i], dpr[k][i - 2] + ls + rs - sub); } } dpl[j][i] = max(dpl[j][i], pre + ls); dpr[j][i] = max(dpr[j][i], pre + ls + rs); ans = max({ans, dpl[j][i], dpr[j][i]}); } } return ans; }
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...