#include <bits/stdc++.h>
#define int long long
#define pb push_back
using namespace std;
signed main()
{
int n,m,a,b,K,i,j,k,ii;
cin>>n>>m>>a>>b>>K;
int L = 200;
int dx[4] = {1,-1,0,0},ans=0;
int dy[4] = {0,0,1,-1};
int dp[n+3][m+3][L],anu[n+3][m+3];
memset(anu,0,sizeof(anu));
for(i=1;i<=n;i++){
for(j=1;j<=m;j++) cin>>anu[i][j];
}
for(i=0;i<=n+1;i++){
for(j=0;j<=m+1;j++){
for(k=0;k<=L;k++) dp[i][j][k] = -1e18;
}
}
dp[a][b][0] = 0;
for(k=1;k<=L;k++){
if(2*k > K) break;
for(i=1;i<=n;i++){
for(j=1;j<=m;j++){
for(ii=0;ii<4;ii++){
dp[i][j][k] = max(dp[i][j][k],dp[i+dx[ii]][j+dy[ii]][k-1]+anu[i][j]);
}
}
}
}
for(i=1;i<=n;i++){
for(j=1;j<=m;j++){
for(k=1;k<=L;k++){
if(2*k > K) break;
// kesini, bolak balik, balik lagi
int val = 0;
for(ii=0;ii<4;ii++) val = max(val,anu[i+dx[ii]][j+dy[ii]]);
ans = max(ans,2*dp[i][j][k]+val*((K-2*k)/2)-anu[i][j]);
}
}
}
cout<<ans;
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |