제출 #866523

#제출 시각아이디문제언어결과실행 시간메모리
866523faricaHomecoming (BOI18_homecoming)C++14
0 / 100
32 ms23896 KiB
#include <bits/stdc++.h> #include "homecoming.h" using namespace std; const int MAX_N=2000000; const int N=1000001; long long int solve(int N, int K, int *A, int *B) { int n=N, k=K; cin >> n >> k; long long a[n], b[n], pref[n]; for(int i=0; i<n; ++i) a[i] = A[i]; for(int i=0; i<n; ++i) { b[i] = B[i]; pref[i] = b[i]; if(i) pref[i] += pref[i-1]; } long long dp[n][2], ans=0; dp[0][0] = -1e18; dp[0][1] = a[0] - pref[k-1]; for(int i=1; i<n; ++i) { dp[i][0] = max(dp[i-1][0], dp[i-1][1]); long long val1 = dp[i-1][1] + a[i]; if((i+k-1)<n) val1 -= b[i+k-1]; long long val2 = dp[i-1][0] + a[i] - pref[min(i+k-1, n-1)] + pref[i-1]; dp[i][1] = max(val1,val2); } ans = max(ans, dp[n-1][1]); ans = max(ans, dp[n-1][0]); dp[0][1] = -1e18; dp[0][0] = 0; for(int i=1; i<n; ++i) { dp[i][0] = max(dp[i-1][0], dp[i-1][1]); long long val1 = dp[i-1][1] + a[i] - b[(i+k-1)%n]; long long val2 = dp[i-1][0] + a[i]; if((i+k-1)<n) val2 -= pref[i+k-1] - pref[i-1]; else val2 -= pref[n-1] - pref[i-1] + pref[(i+k-1)%n]; dp[i][1] = max(val1, val2); } ans = max(ans, dp[n-1][0]); return max(ans, dp[n-1][1]); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...