← Home
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)
}
```