← Home
```go
package main

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

func main() {
	reader := bufio.NewReader(os.Stdin)
	var n int
	fmt.Fscan(reader, &n)

	type Marble struct {
		x, c int64
	}
	marbles := make([]Marble, n)
	for i := 0; i < n; i++ {
		fmt.Fscan(reader, &marbles[i].x, &marbles[i].c)
	}

	sort.Slice(marbles, func(i, j int) bool {
		return marbles[i].x < marbles[j].x
	})

	x := make([]int64, n)
	c := make([]int64, n)
	for i := 0; i < n; i++ {
		x[i] = marbles[i].x
		c[i] = marbles[i].c
	}

	prefix := make([]int64, n+1)
	for i := 0; i < n; i++ {
		prefix[i+1] = prefix[i] + x[i]
	}

	const INF int64 = 1 << 62
	dp := make([]int64, n)

	dp[0] = c[0]

	for i := 1; i < n; i++ {
		dp[i] = INF
		for j := 0; j < i; j++ {
			move := (prefix[i] - prefix[j+1]) - int64(i-j-1)*x[j]
			cost := dp[j] + c[i] + move
			if cost < dp[i] {
				dp[i] = cost
			}
		}
	}

	ans := INF
	for i := 0; i < n; i++ {
		move := (prefix[n] - prefix[i+1]) - int64(n-1-i)*x[i]
		total := dp[i] + move
		if total < ans {
			ans = total
		}
	}

	fmt.Println(ans)
}
```