1 / 9

El Problema de las Vacas

El Problema de las Vacas. Cesar Liza Avila. Enunciado. Se tienen 2 vacas que deben alimentarse. Se coloca bloques de pasto en fila para alimentarlas. Las vacas solo pueden comer el pasto que se encuentra en uno de sus extremos

ave
Download Presentation

El Problema de las Vacas

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. El Problema de las Vacas Cesar Liza Avila

  2. Enunciado • Se tienen 2 vacas que deben alimentarse. Se coloca bloques de pasto en fila para alimentarlas. • Las vacas solo pueden comer el pasto que se encuentra en uno de sus extremos • La primera de ellas, una vaca inteligente desea aplicar una estrategia que le permita comer mas pasto. • La segunda come el bloque de pasto mas grande que se encuentra en uno de los extremos. • Implemente la estrategia de la 1ra vaca. . . . César Liza Avila

  3. Sea Tabla(i, j) la cantidad de pasto que puede comer la vaca 1 cuando empieza a comer con bloques entre i hasta j. i, i+1, i+2, . …..…, j-2, j-1, j La vaca 1, tiene dos alternativas 1)Come pi y luego come lo que pueda comer entre lo que queda Pero que le queda? Pues si pi+1>pj, la vaca 2 come pi+1, dejando tabla(i,j) = pi + tabla(i+2, j) i, i+1, i+2, . … . . …… , j-2, j-1, j Pero si pi+1<pj, la vaca 2 come pj, dejando: tabla(i,j) = pi + tabla(i+1, j-1) i, i+1,i+2, . … . . …… , j-2, j-1, j César Liza Avila

  4. 2)Come pj y luego come lo que pueda comer entre lo que queda Pero que le queda? Pues si pi>pj-1, la vaca 2 come pi, dejando tabla(i,j) = pj + tabla(i+1, j-1) i, i+1, i+2, . … . . …… , j-2, j-1 j Pero si pi<pj-1, la vaca 2 come pj-1, dejando: tabla(i,j) = pj + tabla(i, j-2) i,i+1,i+2, . … . . …… , j-2, j-1 j César Liza Avila

  5. Condición Base: Si n=2 bloques tabla(i, i+1) = max(pi, pi+1) Si pi>pj-1 pj + tabla(i+1, j-1) Si pi+1>pj pi + tabla(i+2, j) tabla(i,j) = max Si pi+1<pj pi + tabla(i+1, j-1) Si pi>pj-1 pj + tabla(i, j-2) , César Liza Avila

  6. void llenaTabla(int n, int tabla[ ][MAX]) { int i,j; for (i=0; i<n; i++) for (j=0; j<n; j++) tabla[i][j] = 0; } void impTabla(int tabla[][MAX], int n) { int i, j; cout<<" "; for (i=0; i<n; i++) cout<<setw(5)<<i; cout<<endl<<endl; for (i=0; i<n; i++) { cout<<"i="<<i<<" "; for (j=0; j<n; j++) cout<<setw(5)<<tabla[i][j]; cout<<endl; } } # include <iostream.h> # include <iomanip.h> #define MAX 100 #define max(a,b) ((a)>(b))?(a):(b) int vacas(int P[], int n); void llenaTabla(int n, int tabla[][MAX]); void impTabla(int tabla[][MAX], int n); void main(void) { int P[ ]={2, 2, 1, 5, 3, 8, 7, 3} ; cout<<"Si la 1ra vaca es inteligente come:“ <<vacas(P, 8)<<endl; } César Liza Avila

  7. int vacas(int P[ ], int n) { int i; int pi, pj; int tabla[MAX][MAX]; llenaTabla(n, tabla); // no es necesario for(i = 0;i< n-1; i++) tabla[i][i+1]= max (P[i], P[i+1]); for(int d=3; d<n; d=d+2) for(int i=0; i<n-d; i++) { int j=i+d; if( P[j]> P[i+1]) pi = tabla[i+1][j-1]; else pi = tabla[i+2][j]; if (P[i]< P[j+1]) pj = tabla[i][j-2]; else pj = tabla[i+1][j-1]; tabla[i][j] = max (P[i] + pi, P[j] + pj); } impTabla(tabla, n); // no es necesario return tabla[0][n-1]; } César Liza Avila

  8. Vaca 1: 3 + 8 + 5 + 2 = 18 Vaca 2: 7 + 3 + 2 +1 = 13 César Liza Avila

  9. PD: Este problema es similar 3379-Two Ends. http://acmicpc-live-archive.uva.es/nuevoportal/ Los movimientos de la vaca que usa la estratagia de tomar el mayor de los extremos debe ser llenado en las diagonales que estan vacias. César Liza Avila

More Related