Advertisement
Guest User

Untitled

a guest
Mar 25th, 2021
330
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.42 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3.  
  4. int triangle[101][101] = {0};
  5. long maxPathSum[101][101][201] = {0};
  6.  
  7.  
  8. int getParity(int n) {
  9.     if(n % 2)
  10.         return -1;
  11.     return 1;
  12. }
  13.  
  14. void solve(){
  15.     int i, j, k;
  16.     int n;
  17.     // take input trinagle
  18.     cin>>n;
  19.     for(i = 0; i < n; i++) {
  20.         for(j = 0; j <= i; j++) {
  21.             cin>>triangle[i][j];
  22.         }
  23.     }
  24.  
  25.     // solution
  26.     if(n%2)
  27.         n--;
  28.     int maxPathParity = 2*n;
  29.     int parity;
  30.     for(j = 0; j < n; j++) {
  31.         parity = getParity(triangle[n-1][j]);
  32.         maxPathSum[n-1][j][n + parity] = triangle[n-1][j];
  33.     }
  34.     for(i = n-2; i >= 0; i--) {
  35.         for(j = 0; j <= i; j++) {
  36.             int currElement = triangle[i][j];
  37.             int parity = getParity(currElement);
  38.             for(k = 0; k <= maxPathParity; k++) {
  39.                 if(k - parity >= 0 && k - parity <= maxPathParity) {
  40.                     long pathDown = maxPathSum[i + 1][j][k - parity];
  41.                     long pathBottomRight = maxPathSum[i + 1][j + 1][k - parity];
  42.                     long maxPath = max(pathDown, pathBottomRight);
  43.                     maxPathSum[i][j][k] = max(maxPathSum[i][j][k],
  44.                                         currElement + maxPath);
  45.                 }
  46.             }
  47.         }
  48.     }
  49.     long ans = maxPathSum[0][0][n];
  50.  
  51.     cout<<ans<<endl;
  52.    
  53. }
  54.  
  55. int main(){
  56.     solve();
  57.  
  58.     return 0;
  59. }
  60.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement