スーパーマリオ
問題の説明
ことをすべて知ってズーム
「
スーパーマリオ
」
である
⼀
探検家をジャンプで非常に良いが、彼は良いショーのジャンプであるが、それは時計を取った
⼀
回だけ前方にジャンプすることができます
⼀
段階または2つのステップを
。
そこ
⼀
回、彼が通過してい
⼀
記事⻓nは⽺⼩腸管、⼩チャンネルがあり、m個の整数ビットに配置されている番号のトラップを、
集合、すなわちA1、A2、ある
... .am、
どこに死すトラップSTART⽆容疑者。トラップの2次がある場合は明らかに、そしてメアリーもかかわらず、発射された
ホップの生活が困難になります。
⼩⻓今のチャネル与えられたN- これらのトラップの、数および配置を。メアリーは位置から得た1 勝到達するために救済をジャンプどのように多くの、起動する
(位置のnに他の側の利益を)。
START入力フォーマット
最初の
⼀
二つの整数N⾏、M
⾏の第二ショットm個の整数は、トラップの位置を示します
出力フォーマット
⼀
整数。メアリージャンプnは表し例数を⽅
サンプルを失うSTART
4 1
2
サンプル出力
1
スケールデータと規則
40> =
N> =
3、M> =
1
N> M。
トラップが設置されることはありません1 およびnは上を
分析:⾯が、その道の階段とleetcodeに同様の問題は、階段を登ること⻓n度であることに注意してください
⽽個々のケースから1からて送信Nに、N-長⾛ - ⻓1度、それがV [1]初期化されている= 1、V [2]は、トラップが1でない場合、トラップがあり、0であります
その後に係る状態遷移処理⽅V [I] = V [I - 1] + V [I - 2];決定された値v [n]は種の数である~~~
#include <iostream>
#include <vector>
using namespace std;
int main() {
int n, m;
cin >> n >> m;
vector<int> v(n+1, -1);
for(int i = 0; i < m; i++) {
int temp;
cin >> temp;
v[temp] = 0;
}
v[1] = 1;
v[2] = v[2] == 0 ? v[2] : 1;
for(int i = 3; i <= n; i++) {
if( v[i] != 0)
v[i] = v[i-1] + v[i-2];
}
cout << v[n];
return 0;
}