card.go 505 B

12345678910111213141516171819202122232425262728293031
  1. package main
  2. import "fmt"
  3. const MOD int = 1000000007
  4. func main() {
  5. var n, s int
  6. fmt.Scan(&n, &s)
  7. cards := make([]int, n)
  8. for i := range cards {
  9. fmt.Scan(&cards[i])
  10. }
  11. dp := make([][]int, n)
  12. for i := range dp {
  13. dp[i] = make([]int, s+1)
  14. }
  15. dp[0][0] = 2
  16. if s != 0 {
  17. dp[0][1] = 1
  18. }
  19. for i := 1; i < n; i++ {
  20. for j := 0; j <= s; j++ {
  21. dp[i][j] = (2 * dp[i-1][j]) % MOD // Not win
  22. if j > 0 {
  23. dp[i][j] = (dp[i][j] + dp[i-1][j-1]) % MOD // Win
  24. }
  25. }
  26. }
  27. fmt.Println(dp[n-1][s])
  28. }