package main import . "fmt" func main() { var n,m,x,y,z int Scan(&n,&m,&x,&y,&z) keeps := []int{} kSum := 0 others := []int{} oSum := 0 for i := 0; i < n; i++ { var a int Scan(&a) if a >= x { keeps = append(keeps, a) kSum += a } else if a > y { others = append(others, a) oSum += a } } if len(keeps) > m { Println("Handicapped") return } dp := make([][]int, m-len(keeps)+1) for i := range dp { dp[i] = make([]int, oSum+1) } dp[0][0] = 1 for _, t := range others { for i := len(dp)-2; i >= 0; i-- { tmp := dp[i+1] for sum, cnt := range dp[i] { if sum+t < len(tmp) { tmp[sum+t] += cnt } } } } ans := 0 for use, sums := range dp { target := z*(len(keeps)+use) - kSum if 0 < target && target < len(sums) { ans += sums[target] } } Println(ans) } /* 考察 DPするだけの典型問題に見えるけど 問題文に実行時間が厳しいとあるから 何か見落としてるかもしれないけどわからない */