(Jizhong) 2219 Fiesta de la fruta (fruta) de profundidad [Búsqueda]

(Archivo IO): Entrada: fruit.in de salida: fruit.out
límite de tiempo: 1000 ms limitaciones de espacio: las restricciones específicas 262144 KB
Goto Boletín de problemas


Título Descripción
Bessie, una vez más se rompió en F una r metro mi r J la h norte Farmer John casa! Encontró un montón de un montón de limones y naranjas (hay un número infinito de cada pila) en la cocina, y ella quiere comer tanto como sea posible.
Bessie tiene un valor total superior del abdomen T ( 1 < = T < = 5 , 000 , 000 ) T (1 <= T <= 5.000.000) . Comer una naranja puede aumentar su A UNA punto de valor de saciedad, aumentará su comiendo un limón B si valor del punto de plenitud ( 1 < = A , B < = T ) (1 <= A, B <= T) , si ella está dispuesta, Bessie puede beber agua como máximo una vez, inmediatamente hará que su valor de saciedad se convierte en un medio, Bessie ayudarán a encontrar el valor máximo plenitud de su disposición.


Introduzca la
línea de tres números enteros T , A EJÉRCITO DE RESERVA y B si

Salida de
línea de un número entero que representa el valor plenitud Bessie máxima obtenible


de entrada de muestra
856

Ejemplo de salida
8


límite de rango de datos


Ideas de resolución de problemas
Este problema es un problema de búsqueda de profundidad. Buscar las naranjas, comiendo y bebiendo valor de saciedad limón, podrá A UNA una. de 0 0 comienzan a recursivamente todos los casos, parece, para encontrar en ella una atención máxima a transfronteriza y la duplicación. Consulte el código.


código

#include<iostream>
#include<cstring>
#include<string>
#include<cstdio>
#include<algorithm>
#include<stdio.h>
#include<iomanip>
#include<cmath>
using namespace std;
int t,a,b,ans;
bool f[5000010],p;
void dfs(int s){
    f[s]=1;
    if(s+a<=t)
    {
        ans=max(ans,s+a);
        if(s+a==t)
        {
            printf("%d",t);
            exit(0);
        }
         if(f[s+a]==0) 
            dfs(s+a);
    }
    if(s+b<=t)
    {
        ans=max(ans,s+b);
        if(s+b==t)
        {
            printf("%d",t);
            exit(0);
        }
         if(f[s+b]==0) 
            dfs(s+b);
    }
    if (p==0&&f[s/2]==0)
    {
        p=1;
        dfs(s/2);
        p=0;
    }
}
int main(){
    freopen("fruit.in","r",stdin);
    freopen("fruit.out","w",stdout);
    scanf("%d%d%d",&t,&a,&b);
    if(t==a||t==b||t%a==0||t%b==0)
    {
        printf("%d",t);
        return 0;
    }
    dfs(0);
    printf("%d",ans);
}
Publicados 119 artículos originales · ganado elogios 8 · vistas 4921

Supongo que te gusta

Origin blog.csdn.net/kejin2019/article/details/104827737
Recomendado
Clasificación