← Home
For problem statement at 0-999/200-299/230-239/234/problemF.txt this is a correct solution, but verifier at 0-999/200-299/230-239/234/verifierF.go ends with All 100 tests passed can you fix the verifier? package main

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

func min(x, y int) int {
	if x < y {
		return x
	}
	return y
}

func main() {
	reader := bufio.NewReader(os.Stdin)
	var n, a, b int
	if _, err := fmt.Fscan(reader, &n, &a, &b); err != nil {
		return
	}

	h := make([]int, n+1)
	for i := 1; i <= n; i++ {
		fmt.Fscan(reader, &h[i])
	}

	dp := make([][2]int, a+1)
	for i := range dp {
		dp[i][0] = 1e9
		dp[i][1] = 1e9
	}

	if h[1] <= a {
		dp[h[1]][0] = 0
	}
	if h[1] <= b {
		dp[0][1] = 0
	}

	S := h[1]

	for i := 2; i <= n; i++ {
		new_dp := make([][2]int, a+1)
		for j := range new_dp {
			new_dp[j][0] = 1e9
			new_dp[j][1] = 1e9
		}

		S += h[i]
		for r := 0; r <= a; r++ {
			if dp[r][0] != 1e9 || dp[r][1] != 1e9 {
				if r+h[i] <= a {
					cost0 := dp[r][0]
					cost1 := dp[r][1]
					if cost1 != 1e9 {
						cost1 += min(h[i-1], h[i])
					}
					new_dp[r+h[i]][0] = min(cost0, cost1)
				}

				if S-r <= b {
					cost1 := dp[r][1]
					cost0 := dp[r][0]
					if cost0 != 1e9 {
						cost0 += min(h[i-1], h[i])
					}
					new_dp[r][1] = min(cost1, cost0)
				}
			}
		}
		dp = new_dp
	}

	ans := int(1e9)
	for r := 0; r <= a; r++ {
		if dp[r][0] < ans {
			ans = dp[r][0]
		}
		if dp[r][1] < ans {
			ans = dp[r][1]
		}
	}

	if ans == 1e9 {
		fmt.Println("-1")
	} else {
		fmt.Println(ans)
	}
}