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
- }
|