Leetcode 5379. juego de guijarros III (183 juegos de semana de la carrera)

título Contenido

Alice y Bob montón con algunas piedras en el juego. Pilas de piedras en una fila, cada uno correspondiente a uno piedras pila puntuación es dada por un stoneValue matriz.

Alice y Bob se turnan piedras, Alice siempre se inicia primero. En el turno de cada jugador, el jugador puede tomar el resto de las piedras frente al montón de piedras 1, 2 o 3. El juego continúa hasta que todas las piedras se han quitado.

La puntuación final para cada jugador que corresponde a cada pila se puso las piedras y la puntuación. La puntuación inicial de cada jugador es 0. El objetivo del juego se decidió en los puntos más altos, el jugador puntuación más alta ganará el juego, el juego puede ser también un empate.

Supongamos que Alice y Bob han tomado la mejor estrategia. Si Alice gana en regreso a la "Alicia", Bob ganó en la declaración de "Bob", (la misma puntuación) dibujar retorno "lazo".

Fuente: estancia botón (LeetCode)
link: https://leetcode-cn.com/problems/stone-game-iii

tema de análisis

Esta pregunta es, de hecho, ahora tome ambos extremos de la matriz y el número de muy similares, son las dos partes de elegir su propia solución óptima, por lo que todavía se puede utilizar un similares de programación dinámica para resolver problemas.

Ideas de resolución de problemas

Dado que ambos lados son óptimas, si analizamos de adelante hacia atrás, las dos partes tienen cada uno tres opciones de estrategia es difícil de conocer el otro lado de la solución óptima después de seleccionar una política, es difícil analizarlo. Así que tenemos que avanzar a partir del análisis de acuerdo con el orden de las piedras, se vierte el comienzo de la introducción del estado óptimo.

Estado indica: orden de la secuencia dp [i] representante de la i-ésima hasta la última piedra de guijarros que consiste en, los jugadores actuales toman piedras máxima obtenible.

Debido a que está fijado de i a marcar la última piedra, es el resultado de todas las piedras y, mientras que las puntuaciones de dos jugadores y una puntuación total de piedras, grava de manera con el fin de aprovechar la corriente máxima puntuación es equivalente a tomar las piedras después de la puntuación más baja del otro lado. Las piedras toma actual 1,2,3 tres tipos de préstamos, por lo que el otro lado de la solución óptima si conocemos estos tres emulado tomaron después, a continuación, elegimos la solución óptima otro tipo de préstamos a un mínimo. ecuación de transición de estado es el siguiente :

// sum[i]为第i个石子到最后一个石子的总得分
dp[i] = sum[i] - min(dp[i+1], dp[i+2], dp[i+3]);

Con la ecuación de transición de estado y, a continuación, tenga en cuenta las condiciones de contorno pueden ser.

Código AC

class Solution {
public:
    string stoneGameIII(vector<int>& stoneValue) {
        int n = stoneValue.size();
        int dp[n];
        // res[i] 表示从第i个石子到最后一个石子的得分之和
        int res[n];
        res[n-1] = stoneValue[n-1];
        for(int i=n-2;i>=0;--i){
            res[i] = res[i+1]+stoneValue[i];
        }
        //dp[n-1] = res[n-1];
        for(int i=n-1;i>=0;--i){
                int minv;
                // 这里表示如果剩下的石子小于等于3
                // 该选手可以一次把所有石子取完
                // minv = 0就表示另一个选手没有石子可以取
                if(i+3>=n) minv = 0;
                else minv = INT_MAX;
                
                if(i+1<n){
                    minv = min(minv, dp[i+1]);
                }
                if(i+2<n){
                    minv = min(minv, dp[i+2]);
                }
                if(i+3<n){
                    minv = min(minv, dp[i+3]);
                }
                dp[i] = res[i]-minv;
        }
        if(res[0]-dp[0]>dp[0]) return "Bob";
        else if(res[0]-dp[0] == dp[0]) return "Tie";
        else return "Alice";
    }
};

Supongo que te gusta

Origin www.cnblogs.com/wenxuanh/p/12636746.html
Recomendado
Clasificación