Python3 - Simple DP after observation
Key observation: The first child must go along the diagonal from [0,0] to [n-1,n-1], any straying from this and they won\'t finish.\nThe other two children can 
Key observation: The first child must go along the diagonal from `[0,0]` to `[n-1,n-1]`, any straying from this and they won\'t finish.\nThe other two children can never pass this diagonal.  If for example the child who started in upper right ever gets to a point where row>column, then they won\'t finish.\nWith this in mind, a simple recursion is all you need. \nThe only other thing to keep in mind is that the other children can MEET the diagonal but can\'t score from it because the first child already did.  That\'s why we see things like this ` (fruits[r][c] if r!=c else 0) `\n```\nclass Solution:\n    def maxCollectedFruits(self, fruits: List[List[int]]) -> int:\n        n=len(fruits)\n\n        @cache\n        def dptr(r,c):\n            if c<r or c>=n: return -float(\'inf\')\n            if r==n-1: return 0 if c==n-1 else -float(\'inf\')\n            return (fruits[r][c] if r!=c else 0) + max(dptr(r+1,c),dptr(r+1,c-1),dptr(r+1,c+1))\n    \n        @cache\n        def dpbl(r,c):\n            if r<c or r>=n: return -float(\'inf\')\n            if c==n-1: return 0 if r==n-1 else -float(\'inf\')\n            return (fruits[r][c] if r!=c else 0) + max(dpbl(r,c+1),dpbl(r-1,c+1),dpbl(r+1,c+1))\n        \n        return sum(fruits[i][i] for i in range(n)) + dptr(0,n-1) + dpbl(n-1,0)\n```
[]