(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
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
. Comer una naranja puede aumentar su
punto de valor de saciedad, aumentará su comiendo un limón
valor del punto de plenitud
, 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
y
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á
una. de
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);
}