贴一下第二题求骰子和的我的解法,用动态规划做。但不知道为啥最后case通过率是98%, 可能哪里没考虑到 package main import ( "fmt" ) func main() { n:=0 k:=0 fmt.Scan(&n,&k) if (n==0 || k==0){ fmt.Println(0) return } arr := make([][14][6]int, k+1) // 用了前0-n个骰子, 最后一个骰子的某个数朝上,用动态规划的思想 data := make([][6]int, n) // for i:=0; i<n; i++{ fmt.Scanln(&data[i][0], &data[i][1], &data[i][2], &data[i][3], &data[i][4], &data[i][5]) // fmt.Println(data[i][0], data[i][1], data[i][2], data[i][3], data[i][4], data[i][5]) } for i:=1; i<=k; i++{ for x:=0; x<6; x++ { if data[0][x] == i { arr[data[0][x]][0][x] = 1 // fmt.Println(arr[data[0][x]][0][x]) } } for j:=1; j<n; j++{ for m:=0; m<6; m++ { if data[j][m] >= i { arr[i][j][m] = 0 } } } } for i:=1; i<=k; i++ { for j:=1; j<n; j++ { for p:=0; p<6; p++ { for q:=0; q<6; q++{ if i>=data[j][p] { arr[i][j][p] += arr[i-data[j][p]][j-1][q] } } } } } sum := 0 for i:=0; i<6; i++ { sum += arr[k][n-1][i] } fmt.Println(sum) }