Ho incontrato questa domanda in un'intervista e non riuscivo a capirlo. Credo che abbia una soluzione di programmazione dinamica ma mi sfugge.Programmazione dinamica piramidi
Dato un numero di mattoncini, è possibile generare il numero totale di piramidi 2d possibili, in cui una piramide è definita come qualsiasi struttura in cui una fila di mattoni ha meno meno mattoni della fila sottostante. Non devi usare tutti i mattoni.
Un mattone è semplicemente un quadrato, il numero di mattoni di fila è l'unico bit importante di informazioni.
Davvero bloccato con questo, ho pensato che sarebbe stato facile risolvere ogni problema 1 ... n in modo iterativo e somma. Ma inventare il numero di piramidi possibili con esattamente i mattoni mi sta sfuggendo.
esempio, n = 6
X
XX
X
XX XXX
X
XXX XXXX
XX X
XXX XXXX XXXXX
X
XX XX X
XXX XXXX XXXXX XXXXXX
Quindi la risposta è 13 possibili piramidi da 6 mattoni.
modificare
sono convinto che questo è un problema di programmazione dinamica, perché ha senso (una volta che hai stabilito la prima riga) basta guardare l'indice nella propria matrice memorizzato del resto dei mattoni per vedere quante piramidi si adattano in cima.
ha anche senso considerare righe inferiori di larghezza almeno n/2 perché non possiamo avere più mattoni cima che sulla riga inferiore TRANNE ed è qui perdo e mente cade a pezzi, in alcuni (pochi casi) puoi N = 10
X
XX
XXX
XXXX
Ora la fila inferiore ha 4 ma ci sono 6 rimasti da mettere sopra
Ma con n = 11 non possiamo avere una fila inferiore con meno di n/2 mattoni. C'è un'altra strana incongruenza come quella con n = 4 in cui non possiamo avere una riga inferiore di n/2 = 2 mattoni.
Se non è necessario utilizzare tutti i mattoni - è bene usare 0 mattoni? Quindi, perché non 14 piramidi legali per n = 6? –
Non sono sicuro, non ricordo bene l'affermazione del problema, ma penso che sia meglio limitare la definizione di una piramide ad almeno un mattone. Buona chiamata, non l'ho menzionato nella dichiarazione del problema. – shane
Sembra perfetto per una funzione ricorsiva. Per qualsiasi problema di combinazione/permutazione, considererei prima la ricorsione piuttosto che la programmazione dinamica. – slebetman