1. Grafi

  • Aprile 2025: due BFS una sul grafo e una sul grafo trasposto.
  • Febbraio 2026: vettore dei visitati condiviso tra più visite con conteggio massimo (aggiornato per visita) dei nodi visitati per visita.
  • Gennaio 2026: somma di due distanze ottenute con due bfs.
  • Giugno 2025: todo
  • Luglio 2025: BFS con stack che oltre al vettore visitati aggiorna un vettore (distanza (indice) numero nodi a quella distanza).
  • Ottobre 2025: visita con un controllo sull’indice dei vicini visitati
  • Settembre 2025: todo

Aprile 2025

Febbraio 2026

Gennaio 2026

Giugno 2025

Luglio 2025

Ottobre 2025

Settembre 2025

2. Programmazione dinamica

  • Aprile 2025: con matrice e regole di produzione (escludi quelle illegali).
  • Febbraio 2026: due vettori, uno per le stringhe che terminano con 0 e uno con non.
  • Gennaio 2026: tre vettori per le stringhe che terminano in 0, 1, 2.
  • Giugno 2025: matrice tre per tre.
  • Luglio 2025: È Il più difficile e usa questa relazione per le celle della matrice di dimensioni : numero modi in cui sottostringa appare in stringa = numero modi in cui sottostringa appare in “stringa senza ultimo carattere” + numero modi in cui sottostringa appare in “stringa con ultimo carattere”. L’ultimo addendo è uguale a numero di modi in cui sottostringa senza ultimo carattere appare in stringa senza ultimo carattere se gli ultimi caratteri delle due sono uguali, altrimenti è 0.

  • Ottobre 2025: la soluzione si può trovare in , mantenendo due array, una per il numero di sotto-sequenze pari con elementi e l’altra per le dispari.
def p(n):
    return 0 if n%2 else 1
 
def d(n):
    return 1 if n%2 else 0
 
def es2(A):
    P = [0] * len(A)
    D = [0] * len(A)
    P[0] = p(A[0])
    D[0] = d(A[0])
    P[1] = p(A[1]) + P[0]
    D[1] = d(A[1]) + D[0]
    for t in range(2, len(A)):
        # somme: vecchie sequenze + nuove sequenze + eventuale sequenza col nuovo numero
        P[t] = P[t-1] + (P[t-2] if p(A[t]) else D[t-2]) + p(A[t])
        D[t] = D[t-1] + (D[t-2] if p(A[t]) else P[t-2]) + d(A[t]) 
    return P[-1]
 
print(es2([1, 2, 5, 4, 6]))
 
# output: 7
  • Settembre 2025: classica programmazione dinamica con array.

Aprile 2025

Febbraio 2025

Gennaio 2025

Giugno 2025

Luglio 2025

Ottobre 2025

Settembre 2025

3. Backtracking

  • Aprile 2025: numero di variazioni passato come argomento da confrontare.
  • Febbraio 2026: backtracking standard.
  • Gennaio 2026: backtracking standard.
  • Giugno 2025: il numero di uni consecutivi (passato in argomento) si resetta quando si aggiunge uno zero nella stringa e aumenta di 1 (fino a k) quando si aggiunge un 1.
  • Luglio 2025: ogni chiamata fa progredire gli indici i e j della matrice riga per riga, è utile definire una funzione next(i, j, lato). Si stampa la matrice quando i == n, cioè quando i è nel primo stato illegale (prima cella della riga inesistente dopo l’ultima della matrice).
  • Ottobre 2025: backtracking standard (stai attento all’ultimo carattere)
  • Settembre 2025: backtracking standard

Aprile 2025

Febbraio 2026

Gennaio 2026

Giugno 2025

Luglio 2025

Ottobre 2025

Settembre 2025