Submission #117084

#TimeUsernameProblemLanguageResultExecution timeMemory
117084BruteforcemanHomecoming (BOI18_homecoming)C++11
100 / 100
204 ms102512 KiB
#include "bits/stdc++.h" #include "homecoming.h" using namespace std; const long long inf = 1e17; long long S[2000010]; long long dp[2][2000010]; long long solve(int N, int K, int *A, int *B) { long long all = 0; for(int i = 0; i < N; i++) { all += A[i] - B[i]; } long long ans = all; long long sum = 0; for(int i = 0; i < K; i++) { sum += B[i]; } for(int i = 0; i < N; i++) { S[i] = sum; sum += B[(i + K) % N] - B[i]; } dp[0][0] = 0; dp[1][0] = -inf; for(int j = 1; j < N; j++) { int id = j; int prev = (id + N - 1) % N; dp[0][id] = max(dp[0][prev], dp[1][prev]); dp[1][id] = max(dp[0][prev] + A[id] - S[id], dp[1][prev] + A[id] - B[(id + K - 1) % N]); } ans = max(ans, dp[0][N - 1]); ans = max(ans, dp[1][N - 1]); dp[0][0] = -inf; dp[1][0] = A[0] - S[0]; for(int j = 1; j < N; j++) { int id = j; int prev = (id + N - 1) % N; dp[0][id] = max(dp[0][prev], dp[1][prev]); dp[1][id] = max(dp[0][prev] + A[id] - S[id], dp[1][prev] + A[id] - B[(id + K - 1) % N]); } ans = max(ans, dp[0][N - 1]); dp[0][0] = -inf; dp[1][0] = A[0] - B[K - 1]; for(int j = 1; j < N; j++) { int id = j; int prev = (id + N - 1) % N; dp[0][id] = max(dp[0][prev], dp[1][prev]); dp[1][id] = max(dp[0][prev] + A[id] - S[id], dp[1][prev] + A[id] - B[(id + K - 1) % N]); } ans = max(ans, dp[1][N - 1]); 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...