← Home
For problem statement at 1000-1999/1300-1399/1320-1329/1322/problemD.txt this is a correct solution, but verifier at 1000-1999/1300-1399/1320-1329/1322/verifierD.go ends with case 27 failed: expected 3 got 6
input:
5 3
3 2 3 2 2
4 5 0 4 0
5 1 5 -4 4 1 2 -4


exit status 1 can you fix the verifier? package main

import (
	"bufio"
	"fmt"
	"math/bits"
	"os"
)

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

	l := make([]int, n)
	for i := 0; i < n; i++ {
		fmt.Fscan(in, &l[i])
	}

	s := make([]int64, n)
	for i := 0; i < n; i++ {
		fmt.Fscan(in, &s[i])
	}

	C := make([]int64, n+m+1)
	for i := 1; i <= n+m; i++ {
		fmt.Fscan(in, &C[i])
	}

	const INF int64 = 1e18
	dp := make([][]int64, m+1)
	for i := 1; i <= m; i++ {
		dp[i] = make([]int64, n+1)
		for j := 0; j <= n; j++ {
			dp[i][j] = -INF
		}
		dp[i][0] = 0
	}

	for i := n - 1; i >= 0; i-- {
		w := l[i]
		s_i := s[i]

		for c := n - 1; c >= 0; c-- {
			if dp[w][c] != -INF {
				var gain int64 = 0
				ones := bits.TrailingZeros(^uint(c))
				for j := 0; j <= ones; j++ {
					gain += C[w+j]
				}

				val := dp[w][c] + gain - s_i
				if val > dp[w][c+1] {
					dp[w][c+1] = val

					cv := w
					cc := c + 1
					for cv < m {
						nc := cc / 2
						if dp[cv][cc] > dp[cv+1][nc] {
							dp[cv+1][nc] = dp[cv][cc]
							cv++
							cc = nc
						} else {
							break
						}
					}
				}
			}
		}
	}

	var ans int64 = 0
	for i := 1; i <= m; i++ {
		for j := 0; j <= n; j++ {
			if dp[i][j] > ans {
				ans = dp[i][j]
			}
		}
	}

	fmt.Println(ans)
}