以下の様な、「階段の上り方」の問題です。
それぞれの段に行くまでに何通りあるか、というのを考えます。
0段目はスタート地点なので、1通り、
1段目は0段目からでしか行けないので1通り、
2段目は0段目から来るケースと1段目からケースがあるから、0段目と1段目の合計値、
それ以降はi段目はi-1段目とi-2段目の合計値となります。
最終的にN段目の合計値を出力すればOKです。
public int UpsideStairs(int N)
{
int[] dp = new int[45];
for(int i = 0; i <= N; i++)
{
if(i <= 1)
{
dp[i] = 1;
}
else
{
dp[i] = dp[i - 1] + dp[i - 2];
}
}
return dp[N];
}