Um problema
-
https://leetcode-cn.com/problems/nge-tou-zi-de-dian-shu-lcof/: questões de face 60: n um dado
II. Solution
-
A programação dinâmica: com DP [n] [j] a expressar n dice aparece número j.
-
equação de transição de estado: n representa o número de pontos de dados gerados aparecendo j é igual ao dice n-1 é gerado j - 1, J - 2, J - 3, J - 4, J - 5, J - 6, e o número de
-
Os passos básicos: 1. Primeiro, configurar parâmetros e correspondentes significados dos parâmetros, escreva dinamicamente transferir equação 2, 3 set o valor do estado inicial.
1. um Código:
classe Solution { público : vector < double > twoSum ( int n) { int dp [15] [70 ]; memset (dp, 0 , sizeof (DP)); para ( int i = 1; i <= 6; i ++ ) { dp [ 1] [i] = 1 ; } Para ( int i = 2, i <= n; i ++ ) { para ( int j = i; j <= 6 * i; j ++ ) { para ( int cur = 1; cur <= 6; cur ++) { Se (j - cur <= 0 ) { ruptura ; } Dp [i] [j] + = dp [I-1] [j- cur]; } } } Int tudo = POW (6 , n); vector < double > ret; para ( int i = n; i <= 6 * n; i ++ ) { ret.push_back (dp [n] [i] * 1.0 / tudo); } Retornar ret; } };
2. Código de dois
-
Optimização da matriz bidimensional em uma matriz unidimensional: é para modificar os valores de trás para a frente , da frente para assegurar que o valor de unidimensional valor constante para obter unidimensional
classe Solution { público : vector < double > twoSum ( int n) { int dp [70 ]; memset (dp, 0 , sizeof (DP)); para ( int i = 1; i <= 6; i ++ ) { dp [i] = 1 ; } Para ( int i = 2, i <= n; i ++ ) { para ( int j = 6 * i, j> = i, j - ) { dp [j] = 0 ; para ( intcur = 1; cur <= 6; cur ++ ) { se (j - cur <i-1 ) { ruptura ; } Dp [j] + = dp [j- cur]; } } } Int tudo = POW (6 , n); vector < double > ret; para ( int i = n; i <= 6 * n; i ++ ) { ret.push_back (dp [i] * 1.0 / tudo); } Retornar ret; } };
Três idéias e código de:
Autor: huwt
link: https: //leetcode-cn.com/problems/nge-tou-zi-de-dian-shu-lcof/solution/nge-tou-zi-de-dian-shu-dong-tai-gui -hua-ji-qi yo- 3 /