カエルの移動というのはこんな感じの問題です。
アルゴリズムのテキストから抜粋しました。
これを計算するのに動的計画法を使用します。
動的計画法とは、数列の漸化式のように問題を小さな問題(一つ前の)計算結果を使用して解くアルゴリズムで、
では漸化式とは?というと、例えばフィボナッチ数列のように、1+1=2、1+2=3、2+3=5、3+5=8のような数列です。
一般化すると、H[i-1]を使用して計算した値と、H[i-2]を使用して計算した値を比較して、適用する値を決定、それを繰り返していく、というやりかたですな。(現時点での理解)
public int FrogMove(int[] H)
{
int[] dp = new int[H.Length];
for(int i = 0; i < H.Length; i++)
{
if(i == 0)
{
dp[i] = 0;
}
if(i == 1)
{
dp[i] = Math.Abs(H[i - 1] - H[1]);
}
if(i >= 2)
{
int v1 = dp[i - 1] + Math.Abs(H[i - 1] - H[i]);
int v2 = dp[i - 2] + Math.Abs(H[i - 2] - H[i]);
dp[i] = Math.Min(v1, v2);
}
}
return dp[H.Length - 1];
}