示例#1
0
 public static Respuesta dp(int numero, int anterior) {
   if (dp[numero][anterior] != null) return dp[numero][anterior];
   if (numero == 1) {
     Respuesta r = new Respuesta();
     if (anterior == ODD) r.o = 1;
     else if (anterior == EVEN) r.e = 1;
     else if (anterior == IMAGINARY) r.i = 1;
     return dp[numero][anterior] = r.clonar();
   }
   Respuesta mejor = null;
   for (int i : factores[numero]) {
     Respuesta r = dp(numero / i, (anterior + 1) % 3);
     if (anterior == ODD) {
       if (mejor == null || r.e <= mejor.e) mejor = r.clonar();
     } else if (anterior == EVEN) {
       if (mejor == null || r.i <= mejor.i) mejor = r.clonar();
     } else if (anterior == IMAGINARY) {
       if (mejor == null || r.o <= mejor.o) mejor = r.clonar();
     }
   }
   if (primos[numero]) {
     Respuesta r = dp(numero + 1, (anterior + 1) % 3);
     if (anterior == ODD) {
       if (mejor == null || r.e < mejor.e) mejor = r.clonar();
     } else if (anterior == EVEN) {
       if (mejor == null || r.i < mejor.i) mejor = r.clonar();
     } else if (anterior == IMAGINARY) {
       if (mejor == null || r.o < mejor.o) mejor = r.clonar();
     }
   }
   if (anterior == ODD) mejor.o = Math.min(numero, mejor.o);
   else if (anterior == EVEN) mejor.e = Math.min(numero, mejor.e);
   else if (anterior == IMAGINARY) mejor.i = Math.min(numero, mejor.i);
   return dp[numero][anterior] = mejor.clonar();
 }
示例#2
0
 Respuesta clonar() {
   Respuesta nueva = new Respuesta();
   nueva.o = o;
   nueva.i = i;
   nueva.e = e;
   return nueva;
 }