¿Acerca de la programación?

Si N personas cruzan el puente

1)

Si N=1, 2, todos cruzan el puente directamente.

2)

Si N=3, la persona más rápida enviará a las otras dos personas a través del río en un viaje de ida y vuelta.

3)

Si N≥4, sean A y B los viajeros más rápidos y el segundo más rápido, y el tiempo necesario para cruzar el puente es a y b respectivamente;

3)

p>

Z e Y son los viajeros más lentos y el segundo más lento, y el tiempo necesario para cruzar el puente es z e y respectivamente. Luego

Cuando 2b>a+y, usa el modo 1 para mover Z e Y a través del puente.

Cuando 2b

Cuando 2b=a+y, usa el modo 1 para mover Z e Y a través del puente.

Esto cambia el problema a la situación de los viajeros N-2 y lo resuelve de forma recursiva.

 

…… p>

←    

......

Es decir, "A te acompaña a el otro lado, y A regresa", lo que se denomina "Modo 1".

…… p>

Paso n-1: A

Paso n:

Y

Z

→ 

Paso n+1: B

←     

……

Este El patrón "consiste en escoltas A y B al otro lado, A y B regresan", lo que se denomina "Modo 2".

Código C++:

#include

#include

usando

espacio de nombres

std;

int

main()

{

int

n

=

4;

int

i,rápido1,rápido2,lento1,lento2,suma,l;

suma

=

0;

int

*a

=

nuevo

int

[n];

for(i

=

1 ;i

<=

n;i++)

cin

a[i] ;

ordenar(a

+

1,a

+

n

+

1);

rápido1

=

a[1];

rápido2

=

a[2];

lento1

=

a[n-1];

lento2

=

a[n];

l

=

1;

mientras(n

!=

0)

{

si(n p>

==

1

||

n

==

2)

{suma

+=

slow2;break;}

if(n

= =

3)

{suma+=(lento2+lento1+rápido1);descanso;}

if(2*rápido2

>=

rápido1+lento1)

{suma+=(lento1+lento2+2*rápido1);n-=2;lento2=a[n];lento1=a[n -1 ];}

else

{suma+=2*rápido2+rápido1+lento2;n-=2;lento2=a[n];lento1=a[n-1 ]; }

}

cout<

retorno

0;

}

El análisis no es original, el código original tiene un poco de fallo, lo he modificado yo mismo

Espero que te sea de ayuda

>