C'è una recinzione con n post, ogni post può essere dipinto con uno dei colori k. Devi dipingere tutti i post in modo tale che non più di due travi di recinzione adiacenti abbiano lo stesso colore. Restituisci il numero totale di modi in cui puoi dipingere la recinzione.Programmazione dinamica - algoritmo di recinzione vernice
diff - numero di combinazioni con colori diversi,
stesso - numero di combinazioni con gli stessi colori,
n - numero di posti,
k - numero di colori.
Per n = 1:
diff = k;
same = 0;
Per n = 2:
diff = k * (k - 1);
same = k;
Per n = 3:
diff = (k + k * (k - 1)) * (k - 1);
same = k * (k - 1);
E la formula finale è:
same[i] = diff[i - 1];
diff[i] = (diff[i - 1] + diff[i - 2]) * (k - 1);
Capisco come trovare same[i]
, ma non capisco come trovare diff[i]
. Puoi spiegare la formula per diff[i]
?
piccolo errore di battitura nella formula, il secondo diff [i-1] deve essere diff [i-2] – user908645
Spiegazione molto educativa. Se avessi preso questa domanda nell'intervista, probabilmente avrei fatto questo ragionamento: 1) Gli ultimi 2 post hanno lo stesso colore, quindi gli ultimi 2 post non possono essere dipinti come l'ultimo 3. (k-1) * diff [n-2] 2) Gli ultimi 2 post hanno colori diversi. (k-1) * diff [n-1] Insieme fanno (k-1) * (diff [n-2] + diff [n - 1]) – user908645