For problem statement at 1000-1999/1400-1499/1430-1439/1433/problemF.txt this is a correct solution, but verifier at 1000-1999/1400-1499/1430-1439/1433/verifierF.go ends with All tests passed can you fix the verifier? package main
import (
"fmt"
)
func main() {
var n, m, k int
if _, err := fmt.Scan(&n, &m, &k); err != nil {
return
}
m2 := m / 2
dp := make([]int, k)
for i := 1; i < k; i++ {
dp[i] = -1
}
dpRow := make([][]int, m2+1)
nextDpRow := make([][]int, m2+1)
for c := 0; c <= m2; c++ {
dpRow[c] = make([]int, k)
nextDpRow[c] = make([]int, k)
}
for i := 0; i < n; i++ {
for c := 0; c <= m2; c++ {
for r := 0; r < k; r++ {
dpRow[c][r] = -1
}
}
dpRow[0][0] = 0
for j := 0; j < m; j++ {
var x int
fmt.Scan(&x)
for c := 0; c <= m2; c++ {
for r := 0; r < k; r++ {
nextDpRow[c][r] = dpRow[c][r]
}
}
for c := 0; c < m2; c++ {
for r := 0; r < k; r++ {
if dpRow[c][r] != -1 {
val := dpRow[c][r] + x
rem := val % k
if val > nextDpRow[c+1][rem] {
nextDpRow[c+1][rem] = val
}
}
}
}
for c := 0; c <= m2; c++ {
for r := 0; r < k; r++ {
dpRow[c][r] = nextDpRow[c][r]
}
}
}
bestRow := make([]int, k)
for r := 0; r < k; r++ {
bestRow[r] = -1
for c := 0; c <= m2; c++ {
if dpRow[c][r] > bestRow[r] {
bestRow[r] = dpRow[c][r]
}
}
}
nextDp := make([]int, k)
for r := 0; r < k; r++ {
nextDp[r] = -1
}
for r1 := 0; r1 < k; r1++ {
if dp[r1] != -1 {
for r2 := 0; r2 < k; r2++ {
if bestRow[r2] != -1 {
val := dp[r1] + bestRow[r2]
rem := val % k
if val > nextDp[rem] {
nextDp[rem] = val
}
}
}
}
}
dp = nextDp
}
if dp[0] == -1 {
fmt.Println(0)
} else {
fmt.Println(dp[0])
}
}