int main() { int i, j, k; for(i=0; i<8; i++) for(j=0; j <= (i+1)*(i+1); j++){ parcial[0][i][j] = parcial[1][i][j] = guarda[i][j] = -1; } for(i=0; i<20; i++) buf[i] = 1; diag2 = buf + 10; while(scanf(" %d %d", &n, &k) && (n || k)) { if(guarda[n-1][k] == -1){ for(i=0; i <= k; i++){ if(parcial[0][n-1][i] == -1){ parcial[0][n-1][i] = resposta(-n + 1, i); parcial[1][n-1][i] = resposta(-n + 2, i); } } guarda[n-1][k] = 0; for(i=0; i <= k; i++) guarda[n-1][k] += parcial[0][n-1][i] * parcial[1][n-1][k-i]; } printf("%d\n", guarda[n-1][k]); } return 0; }
int resposta(int d1, int k) { int d2, l; int r = 0; if(k == 0) return 1; if(d1 >= n) return 0; for(; d1 <= n - k; d1+=2){ if(d1 <= 0) l = n + d1; else l = n - d1; for(d2 = -l + 1; d2 < l; d2 += 2){ if(diag2[d2]){ diag2[d2] = 0; r += resposta(d1+2, k-1); diag2[d2] = 1; } } } return r; }
int main() { int b, i, primo; scanf("%d", &primo); if(2>primo) { b=1; } else { for(i=2;i<primo;i++) { if(primo%i==0) { b=1; break; } else { b=0; } } } resposta(b); return(0); }
int resposta (elemento **c, char *seq1, char *seq2, char *novaseq1, char *novaseq2, int i, int j, int tamanho) { if(i == 0 && j==0) { return tamanho; } elemento per = c[i][j]; int posicao; if(per.i == i-1 && per.j == j-1) { tamanho = resposta(c, seq1, seq2, novaseq1, novaseq2, i-1, j-1, tamanho); posicao = strlen(novaseq1); novaseq1[posicao] = seq1[j-1]; novaseq2[posicao] = seq2[i-1]; if (seq1[j-1] == seq2[i-1]) { tamanho++; } return tamanho; } if(per.i == i && per.j == j-1) { tamanho = resposta(c,seq1,seq2,novaseq1,novaseq2,i,j-1,tamanho); posicao = strlen(novaseq1); novaseq1[posicao] = seq1[j-1]; novaseq2[posicao] = '-'; return tamanho; } tamanho = resposta(c,seq1,seq2,novaseq1,novaseq2,i-1,j,tamanho); posicao = strlen(novaseq1); novaseq1[posicao] = '-'; novaseq2[posicao] = seq2[i-1]; return tamanho; }
int main() { elemento **mat; int ntestes; char sequencia1[100]; char sequencia2[100]; char novaseq1[200]= ""; char novaseq2[200]= ""; //tamanho = quantidade de elementos iguais int tamanho; //n = tamanho sequencia 1 int n; //m = tamanho sequencia 2 int m; //ntestes é a quantidade de testes que terei no meu programa scanf("%d", &ntestes); // esse for pega as 2 proximas sequencias e resolve o problema pra elas, e assim para todo o par de sequencias for(int i=0;i<ntestes;i++) { scanf("%s", sequencia1); scanf("%s", sequencia2); n = strlen(sequencia1); m = strlen(sequencia2); //funcao que cria a matriz alinhamento(sequencia1,sequencia2,&mat); //funcao recursiva que pega o resultado e coloca tamanho = resposta(mat,sequencia1,sequencia2,novaseq1,novaseq2,m,n,0); printf("Tamanho: %d",tamanho); printf("\nAlinhamento: \n"); printf("%s \n",novaseq1); printf("%s \n",novaseq2); strset(novaseq1,0); strset(novaseq2,0); free(&mat); printf("\n"); } return 0; }