dp with dimensions n x n filled with None, where n is the length of the stones array.findDifference(start, end) that returns the maximum score difference the current player can achieve from the subarray stones[start:end+1].dp[start][end] is not None, return the stored value as the result for the current subproblem.start == end, return 0 since there is only one stone left.dp[start][end].dp[start][end] as the result for the current subproblem.findDifference(0, n-1) to get the final result, which is the maximum score difference Alice can achieve.