← Home
```go
package main

import (
	"bufio"
	"fmt"
	"os"
)

func abs(x int) int {
	if x < 0 {
		return -x
	}
	return x
}

func min(a, b int) int {
	if a < b {
		return a
	}
	return b
}

func main() {
	reader := bufio.NewReader(os.Stdin)
	writer := bufio.NewWriter(os.Stdout)
	defer writer.Flush()

	var t int
	if _, err := fmt.Fscan(reader, &t); err != nil {
		return
	}

	const INF int = 1000000000000000000

	for tc := 0; tc < t; tc++ {
		var n int
		fmt.Fscan(reader, &n)
		a := make([]int, n+1)
		for i := 1; i <= n; i++ {
			fmt.Fscan(reader, &a[i])
		}

		dp := make([][]int, 2)
		for i := range dp {
			dp[i] = make([]int, 2*n+3)
			for j := range dp[i] {
				dp[i][j] = INF
			}
		}

		offset := n + 1
		dp[0][offset] = 0

		for i := 1; i <= n; i++ {
			curr := i % 2
			prev := (i - 1) % 2
			for j := range dp[curr] {
				dp[curr][j] = INF
			}

			for j := -n; j <= n; j++ {
				idx := j + offset
				
				val1 := INF
				if idx+1 < len(dp[prev]) {
					val1 = dp[prev][idx+1]
				}

				val2 := INF
				if idx-1 >= 0 && dp[curr][idx-1] != INF {
					val2 = dp[curr][idx-1] - abs(j-1) + a[i]
				}

				best := min(val1, val2)
				if best != INF {
					dp[curr][idx] = best + abs(j)
				}
			}
		}

		fmt.Fprintln(writer, dp[n%2][offset])
	}
}
```