| 12345678910111213141516171819202122232425262728293031323334353637383940 | 
							- // http://exercise.acmcoder.com/quesexcuse?paperId=213
 
- package main
 
- import "fmt"
 
- func main() {
 
- 	var T int
 
- 	fmt.Scan(&T)
 
- 	for cid := 1; cid <= T; cid++ {
 
- 		var n int
 
- 		fmt.Scan(&n)
 
- 		gold := make([]int, n+1)
 
- 		for i := 1; i <= n; i++ {
 
- 			fmt.Scan(&gold[i])
 
- 			gold[i] += gold[i-1]
 
- 		}
 
- 		dp := make([][]int, n)
 
- 		for i := range dp {
 
- 			dp[i] = make([]int, n)
 
- 		}
 
- 		for i := n - 1; 0 <= i; i-- {
 
- 			for j := i; j < n; j++ {
 
- 				if i == j {
 
- 					dp[i][j] = gold[i+1] - gold[i]
 
- 					continue
 
- 				}
 
- 				dp[i][j] = gold[j+1] - gold[i] - minInt(dp[i+1][j], dp[i][j-1])
 
- 			}
 
- 		}
 
- 		fmt.Printf("Case #%d: %d %d\n", cid, dp[0][n-1], gold[n]-gold[0]-dp[0][n-1])
 
- 	}
 
- }
 
- func minInt(x, y int) int {
 
- 	if x < y {
 
- 		return x
 
- 	}
 
- 	return y
 
- }
 
 
  |