Ho cercato di risolvere this programming problem, ma poiché non riesco a capirlo, ho trovato una soluzione online. ma non riesco davvero a capire perché questa soluzione funziona sia ..SPOJ: spiegazione soluzione M3TILE
il compito è quello di calcolare in quanti modi può un 3 * n (n >= 0
, n è l'unico ingresso) rettangolo essere completamente riempiti con 2 * 1 domino.
ad es. (Linee rosse rappresentano domino):
Questo era quello che ho disegnato su un foglio di carta quando ho letto il testo, e ho visto che c'erano tre possibili combinazioni che un rettangolo 3 * 2 può avere e che se n è dispari la soluzione è 0 perché non c'è modo di riempire l'intero rettangolo (un pezzo rimarrà sempre scoperto da un domino).
Quindi ho pensato che la soluzione fosse semplicemente 3^n
, se n era pari, e 0
, se n era dispari. risulta, ho sbagliato.
Ho trovato un soluzione relativamente semplice qui:
#include <iostream>
using namespace std;
int main()
{
int arr[31];
arr[0]=1;
arr[1]=0;
arr[2]=3;
arr[3]=0;
for(int i = 4; i < 31; i++) {
arr[i] = arr[i-2] * 4 - arr[i-4]; //this is the only line i don't get
}
int n;
while(1) {
cin >> n;
if(n == -1) {
break;
}
cout << arr[n] << endl;
}
return 0;
}
Perché fa questo lavoro ?!
Nizza prova! Maggiori informazioni disponibili su http://oeis.org/A001835 –
@Daniel Puoi spiegare il caso base corrispondente a n = 0. –
@ATulSingh Per n = 0, abbiamo una scheda senza celle. C'è un modo preciso per affiancarla: non posizionare nessuna tessera su di essa [una tavola 3 × 0 ha 3 · 0 = 0 celle, quindi hai bisogno di 0/(2 · 1) = 0/2 = 0 tessere]. –