Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- using namespace std;
- #define rep(i,j,k) for(int i=j;i<k;i++)
- int n,grid[102][102],dp[102][102];
- int fun(int r1,int c1,int c2)
- {
- int r2 = r1 + c1 - c2;
- if (n == r1 || n == r2 || n == c1 || n == c2 ||
- grid[r1][c1] == -1 || grid[r2][c2] == -1)
- return -9999999;
- if (r1 == n-1 && c1 == n-1)
- return grid[r1][c1];
- if(dp[r1][c1][c2]!=INT_MIN) return dp[r1][c1][c2];
- int ans=grid[r1][c1];
- if (c1 != c2) ans += grid[r2][c2];
- ans += Math.max(Math.max(dp(r1, c1+1, c2+1), dp(r1+1, c1, c2+1)),
- Math.max(dp(r1, c1+1, c2), dp(r1+1, c1, c2)));
- memo[r1][c1][c2] = ans;
- return ans;
- }
- int main()
- {
- cin>>n;
- rep(i,0,n) rep(j,0,n) cin>>grid[i][j];
- rep(i,0,n) rep(j,0,n) rep(k,0,n) dp[i][j][k]=INT_MIN;
- int ans=fun(0,0,0);
- cout<<max(ans,0);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement