Ok, ho questo compito: il pavimento del bagno di John era rotto. Abbiamo una mappa di questo piano, dove "." è buon piatto, e '+' è male piastra, per esempio:Algoritmo del piano di fissaggio
.+++
.+.+
Qui abbiamo 5 piatti rotti e 3 buoni. Ci sono due tipi di piatti, che sono venduti in negozio: piastre 1x1 e piastre 2x1. La piastra 1x1 costa A e la piastra 2x1 costa B. L'attività è: data la mappa del piano, conteggio del prezzo minimo del fissaggio al suolo.
Guardando l'esempio in alto: possiamo posizionare 2 piastre 2x1 e 1 piastra 1x1. Quindi il prezzo sarà A + 2 * B.
Ho un'idea: per ogni piastra rotta massima lunghezza delle piastre rotte collegate. Quindi il prezzo è lunghezza/2 * B + lunghezza% 2 * A.
Il problema è che davvero non so come farlo. Ho un'idea di qualche algoritmo ricorsivo, ma ci sono così tanti problemi come i cerchi:
+++
+.+
+++
Così ho due domande:
- sto andando nella direzione giusta?
- Puoi darmi qualche suggerimento sull'implementazione di questo algoritmo?
Grazie!
EDIT
C'è caso banale quando 2 * A < B, ma parliamo di non banale =)
/EDIT
Forse l'algoritmo dello zaino sarebbe di ispirazione? http: //en.wikipedia.org/wiki/Knapsack_problem – csl
Puoi iniziare osservando che se '2 * A <= B', tutto ciò di cui hai bisogno è 1x1 tessera. In ogni altro caso, ti consigliamo di massimizzare il numero di tessere 2x1. Quindi la vera domanda è: qual è il massimo di 2x1 tessere che puoi inserire negli spazi rotti? – biziclop
E qui c'è un suggerimento che può aiutare: http://en.wikipedia.org/wiki/Mutilated_chessboard_problem – biziclop