제출 #1201534

#제출 시각아이디문제언어결과실행 시간메모리
1201534Timosh메기 농장 (IOI22_fish)C++20
9 / 100
51 ms16712 KiB
#include "fish.h" #include <bits/stdc++.h> using namespace std; long long max_weights(int N, int M, vector<int> X, vector<int> Y, vector<int> W) { bool ok = 1; for (auto &i : X) ok &= (i % 2 == 0); if (ok) return accumulate(W.begin(), W.end(), 0ll); if (*max_element(X.begin(), X.end()) <= 1) { vector<long long> A(N), B(N); for (int i = 0; i < M; i++) { if (X[i]) B[Y[i]] = W[i]; else A[Y[i]] = W[i]; } if (N == 2) { return max(A[0] + A[1], B[0] + B[1]); } long long mx, s; s = mx = 0; for (int i = 0; i < N; i++) { s += A[i] - B[i]; mx = max(mx, s); } return mx + accumulate(B.begin(), B.end(), 0ll); } N += 5; int K = *max_element(Y.begin(), Y.end()) + 1; vector<vector<long long>> dp(N, vector<long long>(K + 1)), A(N + 1, vector<long long>(K)), pref(N + 1, vector<long long>(K + 1)); for (int i = 0; i < M; i++) A[X[i] + 5][Y[i]] = W[i]; for (int i = 5; i < N; i++) for (int j = 0; j < K; j++) pref[i][j + 1] = pref[i][j] + A[i][j]; for (int i = 3; i < N; i++) { for (int a = 0; a <= K; a++) { for (int b = 0; b <= K; b++) { for (int c = 0; c <= K; c++) { long long cur = dp[i - 2][a] - pref[i - 2][a] + pref[i + 1][c]; cur += pref[i - 1][max(a, c)] - pref[i - 1][min(b, max(a, c))]; if (b > c) cur += pref[i][b] - pref[i][c]; dp[i][c] = max(dp[i][c], cur); } } } } long long mx = 0; for (auto &i : dp) mx = max(mx, *max_element(i.begin(), i.end())); return mx; }
#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...