# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
1227882 | Muhammad_Aneeq | Homecoming (BOI18_homecoming) | C++20 | 0 ms | 0 KiB |
long long solve(int N, int K, int *A, int *B)
{
int n=N;
long long dp[N+10][N+10]={};
long long pre[2*N+10]={};
for (int i=0;i<2*N;i++)
pre[i+1]=pre[i]+B[i%N];
for (int i=0;i<N;i++)
for (int j=0;j<N;j++)
dp[i][j]=-1e15;
long long ans=0;
for (int i=0;i<N;i++)
{
dp[i][i]=A[i]-(pre[i+K]-pre[i]);
ans=max(ans,dp[i][i]);
}
for (int i=0;i<n;i++)
{
for (int j=i;j<n;j++)
{
for (int k=j+1;k<n;k++)
{
int l=k,r=k+K;
l=max(l,j+K);
r=min(r,i+n);
long long sm=0;
if (r>=l)
sm=pre[r]-pre[l];
dp[i][k]=max(dp[i][k],dp[i][j]-sm+A[k]);
ans=max(ans,dp[i][k]);
}
}
}
return ans;
}