1-snatch-gold.go 725 B

12345678910111213141516171819202122232425262728293031323334353637383940
  1. // http://exercise.acmcoder.com/quesexcuse?paperId=213
  2. package main
  3. import "fmt"
  4. func main() {
  5. var T int
  6. fmt.Scan(&T)
  7. for cid := 1; cid <= T; cid++ {
  8. var n int
  9. fmt.Scan(&n)
  10. gold := make([]int, n+1)
  11. for i := 1; i <= n; i++ {
  12. fmt.Scan(&gold[i])
  13. gold[i] += gold[i-1]
  14. }
  15. dp := make([][]int, n)
  16. for i := range dp {
  17. dp[i] = make([]int, n)
  18. }
  19. for i := n - 1; 0 <= i; i-- {
  20. for j := i; j < n; j++ {
  21. if i == j {
  22. dp[i][j] = gold[i+1] - gold[i]
  23. continue
  24. }
  25. dp[i][j] = gold[j+1] - gold[i] - minInt(dp[i+1][j], dp[i][j-1])
  26. }
  27. }
  28. fmt.Printf("Case #%d: %d %d\n", cid, dp[0][n-1], gold[n]-gold[0]-dp[0][n-1])
  29. }
  30. }
  31. func minInt(x, y int) int {
  32. if x < y {
  33. return x
  34. }
  35. return y
  36. }