| 
					
				 | 
			
			
				@@ -0,0 +1,35 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+func maxSumOfThreeSubarrays(nums []int, k int) []int { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	n := len(nums) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	sum := make([]int, n+1) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	for i := 1; i <= n; i++ { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		sum[i] = nums[i-1] + sum[i-1] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	dp := make([][][4]int, 3) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	// dp[i][j] means the maximum sum of i+1 sub arrays until j, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	// dp[i][j] = [4]int{max, i1, i2, i3} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	//                        '-> corresponding index of the maximum 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	for i := range dp { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		dp[i] = make([][4]int, n) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	for i := 0; i < 3; i++ { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		jmax := n - (3-i)*k 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		for j := i * k; j <= jmax; j++ { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			s := sum[j+k] - sum[j] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			if i == 0 { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				if 0 < j && s <= dp[i][j-1][0] { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					dp[i][j] = dp[i][j-1] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				} else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					dp[i][j] = [4]int{s, j, 0, 0} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				continue 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			if ns := dp[i-1][j-k][0] + s; ns <= dp[i][j-1][0] { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				dp[i][j] = dp[i][j-1] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			} else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				dp[i][j] = dp[i-1][j-k] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				dp[i][j][0], dp[i][j][i+1] = ns, j 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	return dp[2][n-k][1:] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 |