ステップジャンプ(ダイナミックプランニング入門)
3092 ワード
階段を跳ぶ
1つの階段にはn段の階段があり、毎回1段または2段歩くことができ、0段目からn段目まで歩くには全部で何種類の案があるかを聞く.
入力フォーマットは、整数nを含む1行です.
出力フォーマットは、シナリオ数を表す整数を含む1行です.
データ範囲1≦n≦15入力サンプル:5出力サンプル:8
考え方:0段目から1段目までの方法1段目の階段0段目から2段目の階段2段目までの方法1種は0-2段目の階段1種は1段目までの階段2段目の階段0段目から3段目までの2種の方法1種は0-2-3種は0-1-2-2-3種(ここで0-1-2-2はすでに前の方法に含まれている)
逆から見るとnステップのシナリオ数=n-1ステップのシナリオ数+n-2のシナリオ数
1つの階段にはn段の階段があり、毎回1段または2段歩くことができ、0段目からn段目まで歩くには全部で何種類の案があるかを聞く.
入力フォーマットは、整数nを含む1行です.
出力フォーマットは、シナリオ数を表す整数を含む1行です.
データ範囲1≦n≦15入力サンプル:5出力サンプル:8
考え方:0段目から1段目までの方法1段目の階段0段目から2段目の階段2段目までの方法1種は0-2段目の階段1種は1段目までの階段2段目の階段0段目から3段目までの2種の方法1種は0-2-3種は0-1-2-2-3種(ここで0-1-2-2はすでに前の方法に含まれている)
逆から見るとnステップのシナリオ数=n-1ステップのシナリオ数+n-2のシナリオ数
#include
using namespace std;
int arr[20];
int main()
{
int n;
cin >> n;
arr[1] = 1; arr[2] = 2;
for(int i = 3;i <=15;i++){
arr[i] = arr[i-1]+arr[i-2];
}
cout << arr[n];
return 0;
}