← Home
For problem statement at 0-999/900-999/990-999/999/problemF.txt this is a correct solution, but verifier at 0-999/900-999/990-999/999/verifierF.go ends with All tests passed can you fix the verifier? package main

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

func main() {
	reader := bufio.NewReader(os.Stdin)
	var n, k int
	if _, err := fmt.Fscan(reader, &n, &k); err != nil {
		return
	}

	cardCounts := make([]int, 100005)
	for i := 0; i < n*k; i++ {
		var c int
		fmt.Fscan(reader, &c)
		cardCounts[c]++
	}

	favCounts := make([]int, 100005)
	for i := 0; i < n; i++ {
		var f int
		fmt.Fscan(reader, &f)
		favCounts[f]++
	}

	h := make([]int, k+1)
	for i := 1; i <= k; i++ {
		fmt.Fscan(reader, &h[i])
	}

	dp := make([][]int, n+1)
	for i := range dp {
		dp[i] = make([]int, n*k+1)
	}

	for i := 1; i <= n; i++ {
		for j := 0; j <= i*k; j++ {
			for t := 0; t <= k && t <= j; t++ {
				if j-t <= (i-1)*k {
					if dp[i][j] < dp[i-1][j-t]+h[t] {
						dp[i][j] = dp[i-1][j-t] + h[t]
					}
				}
			}
		}
	}

	totalJoy := 0
	for val, p := range favCounts {
		if p > 0 {
			c := cardCounts[val]
			maxJoy := 0
			limit := c
			if limit > p*k {
				limit = p * k
			}
			for j := 0; j <= limit; j++ {
				if dp[p][j] > maxJoy {
					maxJoy = dp[p][j]
				}
			}
			totalJoy += maxJoy
		}
	}

	fmt.Println(totalJoy)
}