#include int Wsaved[12][12]; int W(int n, int k){ // Beraknar och returnerar W(n,k) if(k==0) return 1; if(k>(n-1)/2) return 0; if(Wsaved[n][k]==-1) Wsaved[n][k] = W(n-2, k-1) + W(n-1, k); return Wsaved[n][k]; } int len[4]; int wall(int nr, int F, int D){ //Hur manga satt kan den nr:te och de aterstaende sidorna konstrueras med F fonster och D dorrar int f,s; if(nr==4){ if(F==0 && D==0) return 1; else return 0; } s=0; for(f=1;f<=F+D && f<=F+1;f++){ if(F>=f) s += W(len[nr],f) * wall(nr+1,F-f,D); if(D>=1) s += W(len[nr],f) * f * wall(nr+1,F-(f-1),D-1); } return s; } int main() { int L,B,FF,DD,i,j; for(i=0;i<12;i++) for(j=0;j<12;j++) Wsaved[i][j]=-1; printf("Langd ? "); scanf("%d", &L); printf("Bredd ? "); scanf("%d", &B); printf("Antal fonster ? "); scanf("%d", &FF); printf("Antal dorrar ? "); scanf("%d", &DD); len[0]=len[1]=L; len[2]=len[3]=B; printf("Antal hus: %d\n", wall(0,FF,DD)); return 0; }