Tabla de contenido
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 .y
x
y
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!