Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- using namespace std;
- int triangle[101][101] = {0};
- long maxPathSum[101][101][201] = {0};
- int getParity(int n) {
- if(n % 2)
- return -1;
- return 1;
- }
- void solve(){
- int i, j, k;
- int n;
- // take input trinagle
- cin>>n;
- for(i = 0; i < n; i++) {
- for(j = 0; j <= i; j++) {
- cin>>triangle[i][j];
- }
- }
- // solution
- if(n%2)
- n--;
- int maxPathParity = 2*n;
- int parity;
- for(j = 0; j < n; j++) {
- parity = getParity(triangle[n-1][j]);
- maxPathSum[n-1][j][n + parity] = triangle[n-1][j];
- }
- for(i = n-2; i >= 0; i--) {
- for(j = 0; j <= i; j++) {
- int currElement = triangle[i][j];
- int parity = getParity(currElement);
- for(k = 0; k <= maxPathParity; k++) {
- if(k - parity >= 0 && k - parity <= maxPathParity) {
- long pathDown = maxPathSum[i + 1][j][k - parity];
- long pathBottomRight = maxPathSum[i + 1][j + 1][k - parity];
- long maxPath = max(pathDown, pathBottomRight);
- maxPathSum[i][j][k] = max(maxPathSum[i][j][k],
- currElement + maxPath);
- }
- }
- }
- }
- long ans = maxPathSum[0][0][n];
- cout<<ans<<endl;
- }
- int main(){
- solve();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement