通学路(動的計画法)
void calc(void)
{
int t[17][17] = {};
for (int j=1;j <= a;j++) {
for (int k=1;k <= b;k++) {
if (j==1 && k==1)
t[k][j] = 1;
else if (point[k][j] == 1)
t[k][j] = 0;
else
t[k][j] = t[k][j-1] + t[k-1][j];
}
}
m = t[b][a];
}
mainはさっきの記事と同じ
動的計画法ってよく出てくるんですけど、使いこなせていないのが現実orz
数学的な思考が足りてませんかそうですか
再帰の場合は計算量が抜群に増えていきますが、動的計画法ではそれほど気になりません。
5番目の一番大きい入力ファイルで時間を測ってみたところ
再帰 : 500ミリ秒
動的 : 0ミリ秒
圧倒的といえば圧倒的ですね。
5番目のファイルの先頭を16 16から19 19に変更するとさらに差が広がります。再帰だと10秒以上かかりますが、動的計画法だと数ミリ秒で終わります。この差はデカイ!