AOJ - Problem 0515 : School Road
スタートからゴールまでの経路が何通りあるか調べる問題です。典型的な動的計画法で解くことができます。
動的計画法については最強最速アルゴリズマー養成講座のアルゴリズマーの登竜門、「動的計画法・メモ化再帰」はこんなに簡単だったの説明がわかりやすいと思います。
#include <iostream> #include <algorithm> using namespace std; int main(){ int a,b; while( cin >> a >> b , a||b ){ int n,f[20][20] = {0}; f[1][1] = 1; cin >> n; for(int i=0 ; i < n ; i++ ){ int x,y; cin >> x >> y; f[y][x] = -1; } for(int y=1 ; y <= b ; y++ ){ for(int x=1 ; x <= a ; x++ ){ if( f[y][x] != -1 ){ if( y != 1 && f[y-1][x] != -1 ){ f[y][x] += f[y-1][x]; } if( x != 1 && f[y][x-1] != -1 ){ f[y][x] += f[y][x-1]; } } } } cout << f[b][a] << endl; } }