fork(1) download
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3.  
  4. #define int long long
  5.  
  6. #define for1(i,m,n) for(int i=m;i<=n;i++)
  7. #define for0(i,m,n) for(int i=m;i<n;i++)
  8. #define vll(v) v.begin(),v.end()
  9. #define ii pair<int,int>
  10. #define se second
  11. #define fi first
  12. #define el '\n'
  13.  
  14. const int N=1e2;
  15. const int mod=-25*1e5-11;
  16. int n,m,k;
  17.  
  18. int h[4]={-1,0,1,0},c[4]={0,1,0,-1};
  19.  
  20. int f[N][N][N],a[N][N];
  21.  
  22. bool inside(int x,int y){
  23. return x>=1&&x<=n&&y>=1&&y<=m;
  24. }
  25. signed main(){
  26. ios_base::sync_with_stdio(0);
  27. cin.tie(0);
  28. cout.tie(0);
  29.  
  30. cin>>n>>m>>k;
  31. for1(i,1,n)
  32. {
  33.  
  34. for1(j,1,m) {
  35. cin>>a[i][j];
  36.  
  37. }
  38. }
  39. memset(f,-0x3f,sizeof f);
  40. f[1][1][0]=0;
  41. for1(u,0,k)
  42. for1(i,1,n)
  43. for1(j,1,m)
  44. {
  45. for1(vt,0,3){
  46. int h_=i+h[vt],c_=j+c[vt];
  47. if(inside(h_,c_)){
  48. // cout<<h_<<' '<<c_<<' '<<<<el;
  49. if((vt==1||vt==2)&&u>0) f[i][j][u]=max(f[i][j][u],f[h_][c_][u-1]+a[i][j]);
  50. else if(vt!=1&&vt!=2) f[i][j][u]=max(f[i][j][u],f[h_][c_][u]+a[i][j]);
  51. }
  52. }
  53. // cout<<i<<' '<<j<<' '<<u<<' '<<f[i][j][u]<<el;
  54. }
  55. int ans=mod;
  56. for1(i,0,k) ans=max(ans,f[n][m][i]);
  57. cout<<ans;
  58. return 0;
  59. }
  60. /*
  61. 3 4 1
  62. 1 2 -1 -1
  63. 1 -1 -1 -1
  64. 1 1 1 1
  65. */
Success #stdin #stdout 0.01s 11312KB
stdin
Standard input is empty
stdout
-2500011