← Home
For problem statement at 0-999/600-699/620-629/626/problemF.txt this is a correct solution, but verifier at 0-999/600-699/620-629/626/verifierF.go ends with passed 100/100 can you fix the verifier? package main

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

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

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

	sort.Ints(a)

	mod := int(1e9 + 7)

	dp := make([][]int, n+1)
	next := make([][]int, n+1)
	for i := 0; i <= n; i++ {
		dp[i] = make([]int, k+1)
		next[i] = make([]int, k+1)
	}

	dp[0][0] = 1

	for i := 0; i < n; i++ {
		diff := 0
		if i > 0 {
			diff = a[i] - a[i-1]
		}

		for j := 0; j <= n; j++ {
			for sum := 0; sum <= k; sum++ {
				next[j][sum] = 0
			}
		}

		for j := 0; j <= i && j <= n; j++ {
			for sum := 0; sum <= k; sum++ {
				if dp[j][sum] == 0 {
					continue
				}

				ns := sum + j*diff
				if ns > k {
					continue
				}

				next[j][ns] = (next[j][ns] + dp[j][sum]*(j+1)) % mod

				if j+1 <= n {
					next[j+1][ns] = (next[j+1][ns] + dp[j][sum]) % mod
				}

				if j > 0 {
					next[j-1][ns] = (next[j-1][ns] + dp[j][sum]*j) % mod
				}
			}
		}

		for j := 0; j <= n; j++ {
			for sum := 0; sum <= k; sum++ {
				dp[j][sum] = next[j][sum]
			}
		}
	}

	ans := 0
	for sum := 0; sum <= k; sum++ {
		ans = (ans + dp[0][sum]) % mod
	}

	fmt.Println(ans)
}