Frogger traversant la rivière [méthode récursive]


description du sujet

Il y a une rivière avec une jetée en pierre sur la gauche ( AALa zone A ) a les numéros1, 2, 3, 4, …, n 1, 2, 3, 4, …, n1 2 3 4 , n denn grenouilles, il y akkk feuilles de lotus (CCZone C ), ethhh piliers en pierre (DDZone D ), avec une jetée en pierre sur la droite (BBZone B ), comme indiqué dans la figure ci-dessous. nn les grenouilles veulent traverser la rivière (depuis la jetée en pierreAAA à la jetée en pierre de la rive droiteBBB ), la règle est :
insérez la description de l'image ici

  • La jetée en pierre peut porter n'importe quel nombre de grenouilles et la feuille de lotus ne peut porter qu'une seule grenouille (quelle que soit sa taille).
  • Les grenouilles peuvent : AAABBB (disponible auprès deAAA saute àBBB , idem ci-dessous),AAACCCAAAJJDCCCBBBJJDBBBJJDCCCCCCJJD
  • Lorsqu'il y a plusieurs grenouilles sur une jetée en pierre, la grenouille qui s'y trouve ne peut sauter que sur la grenouille qui est 1 taille plus grande qu'elle.

Votre tâche est de donner hhh ,kkk , calcule et affiche combien de grenouilles peuvent traverser la rivière en douceur selon les règles ci-dessus ?

Échantillons d'entrée et de sortie

échantillon d'entrée

2 22 3 33

Il y en a 2 2 au milieu de la rivière2 grille en pierre,3 33 feuilles de lotus

échantillon de sortie

16 1616

Jusqu'à 16 1616 grenouilles peuvent traverser la rivière selon les règles


solution récursive

la clé ici
Du spécifique au général, le processus de dérivation est le suivant :
f ( 0 , 0 ) = 1 f(0,0)=1f ( 0 ,0 )=1
f ( 0 , k ) = k + 1 ; f(0,k)=k+1 ;f ( 0 ,k )=k+1 ;       (par exemplek = 3 k=3k=3 quand il y a4 44 grenouilles peuvent traverser la rivière)
f ( 1 , k ) = 2 ( k + 1 ) ; f(1,k)=2(k+1);f ( 1 ,k )=2 ( k+1 ) ;       (pensée par récurrence)
f ( 2 , k ) = 2 ( k + 1 ) × 2 = 2 2 × ( k + 1 ) ; f(2,k)=2(k+1)×2=2 ^ 2×(k+1);f ( 2 ,k )=2 ( k+1 )×2=22×( k+1 ) ;
...
et ainsi de suite pour obtenir la formule récursive :F ( i , k ) = F ( i − 1 , k ) × 2 = 2 i × ( k + 1 ) ; F(i,k)=F (i -1,k)×2=2^i×(k+1);F ( je ,k )=F ( je1 ,k )×2=2je×( k+1 ) ;
...
donc,f ( h , k ) = 2 h × ( k + 1 ) f(h,k)=2^h×(k+1)f ( h ,k )=2h×( k+1 )


Code CA

#include <bits/stdc++.h>
using namespace std;
long long h,k,ans=1;
int main()
{
    
    
	cin >>h >>k;
	while (h--)
		ans*=2;
	ans*=(k+1);
	cout <<ans;
	return 0;
}

Je suppose que tu aimes

Origine blog.csdn.net/DUXS11/article/details/132079158
conseillé
Classement