Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <cstdio>
- #include <climits>
- #include <cstdlib>
- #include <cmath>
- #include <cctype>
- #include <cstring>
- #include <string>
- #include <vector>
- #include <map>
- #include <set>
- #include <algorithm>
- #include <sstream>
- using namespace std;
- typedef vector<int> vi;
- typedef vector<vi> vvi;
- typedef pair<int, int> ii;
- typedef vector<ii> vii;
- typedef vector<vii> vvii;
- typedef vector<bool> vb;
- #define sz(c) int((c).size())
- #define all(c) (c).begin(), (c).end()
- vvi grid;
- vector< vector< vector< vector<int> > > > memo;
- int n, x;
- int sum(int i, int j, int k, int l,vector< vector< vector< vector<int> > > >& memo)
- {
- if(memo[i][j][k][l] != INT_MIN)
- return memo[i][j][k][l];
- else
- {
- int ans = grid[i][j] + grid[k][l], max = INT_MIN;
- if(i > 0 && l > 0)
- {
- int tmp = sum(i-1, j, k, l-1, memo);
- max = max < tmp ? tmp : max;
- }
- if(j > 0 && k > 0)
- {
- int tmp = sum(i, j-1, k-1, l, memo);
- max = max < tmp ? tmp : max;
- }
- return ans+max;
- }
- }
- int main(void)
- {
- int n, x;
- scanf("%d", &n);
- grid.clear(); grid.resize(n);
- for(int i = 0;i < n;i++)
- {
- for(int j = 0;j < n;j++)
- {
- scanf("%d", &x);
- grid[i].push_back(x);
- }
- }
- memo.clear(); memo.resize(n, vector< vector< vector<int> > >(n, vector< vector<int> >(n, vector<int>(n, INT_MIN))));
- memo[0][0][0][n-1] = grid[0][0] + grid[0][n-1];
- int ans = sum(n-1, 0, n-1, n-1, memo);
- printf("%d\n", ans);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement