For problem statement at 0-999/500-599/540-549/542/problemF.txt this is a correct solution, but verifier at 0-999/500-599/540-549/542/verifierF.go ends with wrong answer on test 1
input:
5 5
1 1
1 1
2 2
3 3
4 4
expected:
5
got:
11
exit status 1 can you fix the verifier? ```go
package main
import (
"fmt"
"sort"
)
func max(a, b int) int {
if a > b {
return a
}
return b
}
func main() {
var n, T int
fmt.Scan(&n, &T)
lists := make([][]int, T+1)
for i := 0; i < n; i++ {
var t, q int
fmt.Scan(&t, &q)
lists[t] = append(lists[t], q)
}
prefixes := make([][]int, T+1)
for t := 1; t <= T; t++ {
sort.Slice(lists[t], func(i, j int) bool {
return lists[t][i] > lists[t][j]
})
m := len(lists[t])
prefixes[t] = make([]int, m+1)
for j := 1; j <= m; j++ {
prefixes[t][j] = prefixes[t][j-1] + lists[t][j-1]
}
}
const MAXC = 1001
dp := make([][][]int, T+1)
for i := 0; i <= T; i++ {
dp[i] = make([][]int, MAXC+1)
for c := 0; c <= MAXC; c++ {
dp[i][c] = make([]int, 2)
}
}
for i := 0; i <= T; i++ {
for c := 0; c <= MAXC; c++ {
for z := 0; z < 2; z++ {
dp[i][c][z] = -1
}
}
}
dp[0][0][1] = 0
for k := 1; k <= T-1; k++ {
avail := len(lists[k])
for carry_in := 0; carry_in <= MAXC; carry_in++ {
for zz := 0; zz < 2; zz++ {
source := dp[k-1][carry_in][zz]
if source == -1 {
continue
}
for j := 0; j <= avail; j++ {
total := j + carry_in
carry_out := total / 2
if carry_out > MAXC {
continue
}
bit := total % 2
added := prefixes[k][j]
new_val := source + added
new_z := 0
if zz == 1 && bit == 0 {
new_z = 1
}
dp[k][carry_out][new_z] = max(dp[k][carry_out][new_z], new_val)
}
}
}
}
ans := 0
for carry_in := 0; carry_in <= MAXC; carry_in++ {
for zz := 0; zz < 2; zz++ {
source := dp[T-1][carry_in][zz]
if source == -1 {
continue
}
avail := len(lists[T])
for j := 0; j <= avail; j++ {
total := j + carry_in
carry_out := total / 2
bit := total % 2
added := prefixes[T][j]
new_val := source + added
valid := carry_out == 0 && (bit == 0 || (bit == 1 && zz == 1))
if valid {
ans = max(ans, new_val)
}
}
}
}
fmt.Println(ans)
}
```