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 :
- 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 : AAA →BBB (disponible auprès deAAA saute àBBB , idem ci-dessous),AAA →CCC,AAA →JJD,CCC →BBB,JJD →BBB,JJD →CCC,CCC →JJD;
- 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 ( je−1 ,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;
}