[Preguntas de pincel de Likou | vigésimo quinto día]

Tabla de contenido

Prefacio:

  474. Uno y cero - LeetCode

Resumir:


Prefacio:

        Hoy todavía le ganamos a la programación dinámica

  474. Uno y cero - LeetCode

Se le proporciona una matriz de cadenas binarias  strs y dos  m sumas  de enteros n .

Encuentre y devuelva  strs la longitud del subconjunto más grande, hay   como  máximom  uno  0 y  n uno  en este subconjunto 1 .

Un conjunto es un subconjunto  de un conjunto  si  x todos los elementos de son también   elementos   de   .yxy

De hecho, este también es un problema de mochila, pero antes nuestra restricción era solo un peso, ahora se ha convertido en dos, uno es m y el otro es n. Entonces podemos verlo de manera abstracta como un problema de mochila 01 bidimensional.

Luego seguimos los cinco pasos de la programación dinámica:

1. Determine el significado de la matriz dp y su método de subíndice: dp[i][j] representa la longitud máxima del subconjunto en una mochila llena de i 0s y j 1s

class Solution {
public:
    int findMaxForm(vector<string>& strs, int m, int n) {
            vector<vector<int>> dp(m + 1, vector<int> (n + 1, 0)); 
        for (string str : strs) { 
            int one = 0, zero = 0;
            for (char c : str) {
                if (c == '0') zero++;
                else one++;
            }
            for (int i = m; i >= zero; i--)
             { 
                for (int j = n; j >= one; j--) 
                {
                    dp[i][j] = max(dp[i][j], dp[i - zero][j - one] + 1);
                }
            }
        }
        return dp[m][n];
    }
    
};

Resumir:

                La programación dinámica es difícil de ver de un vistazo que es un problema de mochila, y debe examinarse cuidadosamente

Si mi contenido es útil para ti, dale me gusta, comenta y marca . ¡La creación no es fácil, el apoyo de todos es mi motivación para perseverar!

Supongo que te gusta

Origin blog.csdn.net/fckbb/article/details/132178613
Recomendado
Clasificación