Un problema
-
https://leetcode-cn.com/problems/nge-tou-zi-de-dian-shu-lcof/: preguntas cara 60: n un dado
II. Solución
-
Programación Dinámica: con DP [n] [j] para expresar n dados aparece el número j.
-
ecuación de transición de estados: n representa el número de puntos dados generados apareciendo j es igual a los dados se genera n-1 j - 1, j - 2, j - 3, j - 4, j - 5, J - 6, y el número de
-
Los pasos básicos: 1. En primer lugar, configurar los parámetros y los correspondientes significados de los parámetros, escritura dinámicamente transferir ecuación 2, 3 conjunto el valor inicial estado.
1. un código:
clase Solution { público : vector < doble > 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 ++) { Si (j - cur <= 0 ) { descanso ; } Dp [i] [j] + = dp [i-1] [j- cur]; } } } Int all = pow (6 , n); vector < doble > ret; para ( int i = n; i <= 6 * n; i ++ ) { ret.push_back (dp [n] [i] * 1,0 / todos); } Devolver ret; } };
2. Código de dos
-
Optimización de la matriz de dos dimensiones en una matriz unidimensional: es para modificar los valores de atrás hacia delante , frente a asegurar que el valor de unidimensional valor constante para obtener unidimensional
clase Solution { público : vector < doble > 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 ++ ) { si (j - cur <i-1 ) { descanso ; } Dp [J] + = dp [j- cur]; } } } Int all = pow (6 , n); vector < doble > ret; para ( int i = n; i <= 6 * n; i ++ ) { ret.push_back (dp [i] * 1,0 / todos); } Devolver ret; } };
Tres ideas y código de:
Autor: huwt
enlace: 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 /