1) A veces hay situaciones en las que tiene algún algoritmo que marca elementos / vértices / elementos con valor 0/1, y necesita ejecutarlo varias veces. La razón más común para hacerlo sería porque un problema dado contiene pruebas múltiples. Ejemplo simple: está ejecutando dfs en un gráfico para contar vértices alcanzables. Muchos principiantes simplemente llenarán la matriz usada con 0 en cada iteración, pero puede hacerlo más inteligente: use una matriz de enteros en lugar de una matriz booleana y almacene algún contador global (tal vez simplemente la cantidad de prueba actual) para saber qué valor significa ‘1’ ahora mismo. Ahora puedes hacer todos los cheques de esta manera:
si (usado [v]! = T)
en lugar de
si (usado [v] == 0)
- ¿Cuáles son las consultas SQL más utilizadas y cómo se escriben?
- ¿Es una universidad un buen lugar para aprender a invertir?
- ¿Cuáles son las similitudes / diferencias entre los idiomas japonés y chino?
- ¿Cuál es la mejor manera de enseñarle a una persona mayor cómo usar una computadora e Internet?
- ¿Es mejor diversificar o especializarse en educación?
Ahora, en lugar de llenar todo el conjunto con 0, simplemente puede hacer T ++ optim Optimización constante bastante fácil que a veces ayuda mucho.
2) Y otra pista para los concursantes un poco más experimentados. La programación dinámica en un árbol es un tema relativamente popular. Cuando ha implementado una solución, por lo general hay una forma simple y rápida de probarla un poco: intente ejecutarla en un gran gráfico aleatorio mientras selecciona diferentes vértices como raíz de un árbol. Si sabe que la respuesta a un problema no depende de qué vértice se seleccionó como raíz, debe recibir los mismos resultados a pesar del roteoting tree. Ahora, si tiene las mismas respuestas, es natural esperar que no tenga errores graves allí, y que ni siquiera necesite implementar la fuerza bruta; Si tienes respuestas diferentes, significa que deberías buscar algunos errores.