みんなから「それはフィボナッチ数列だ」と言われてしまいました。
しかし、階段アルゴリズムはフィボナッチ数列だけではありません。
階段の例であっても、一度に3段、4段、それ以上登れるという問題も考えられます。
また、このような応用例があります。
「ここのチャットのサイコロ(1~最大256の目が出るさいころが1~100個ある)で、
出た目の合計が特定の数になる目の出方は何通りか」
これを求めるプログラムを書くと、こうなります。
package main;
import java.io.*;
import java.math.BigInteger;
public class PutternNumberGetter {
public static void MakePutternNumberTable(int me_max) {
BigInteger[][] list;
list=new BigInteger[100*me_max][100];
int i,j,k;
//リストの初期化
for(i=0;i100)return BigInteger.ZERO;
if(targetkaisuu*me_max)return BigInteger.ZERO;
return list[target-1][kaisuu-1];
}
public BigInteger GetAllPuttern(int kaisuu) {
BigInteger me=BigInteger.valueOf((long)me_max);
return me.pow(kaisuu);
}
*/
}
階段の各段に「これまでの場合の数」だけでなく「何回でこの段に来たか」という情報も加えています。
一度に何段まで登れるかというのは、いくつの目まで出るかということになります。
このプログラムで調べると、list[目の数の和-1][振るサイコロの数-1]に、
1~me_maxの目が出るサイコロを(振るサイコロの数)個振ったときに
目の数の和が(目の数の和)になる場合の数が格納されます。
警告
このプログラムは、特にme_maxが大きい時、非常に重いです。
また、巨大なファイルが出力されます。
me_max=256のとき、約172MBのファイルが出力されました。
さて、改めて、このようなアルゴリズムは正式にはなんと呼ばれるのでしょうか?
またコメントで教えていただければありがたいです。
よろしくお願いします。