题目:象棋中马走“日”字型,以棋盘的左下角为原点,向上为y轴正方向,建立坐标系。
牛牛想知道,棋盘左下角的马,进过K次移动之后,落在坐标(X, Y)的情况有多少种。当任意一次移动后马的位置不同时,两种情况被认为不同。结果取模1000000007。
其中K<= 100000, 0<=X<=8,0<=Y<=8。
输入:
2
3 3
输出:
2
分析:
首先建立一个vector存储每一次移动的所有可能操作
vector< pair< int, int>> temp = { pair< int, int>(-2, -1),pair< int, int>(-2, 1),pair< int, int>(-1, 2),pair< int, int>(-1, -2),
pair< int, int>(1, -2),pair< int, int>(1, 2),pair< int, int>(2, -1),pair< int, int>(2, 1) };
dp[i][a][b]表示i次移动后,马位于坐标(a,b)的情况数。
第i次到达(a,b),则n-1次必须到达(a+temp[i].first, b+temp[i].second),因此
dp[i][a][b] +=dp[i-1][a+temp[i].first][b+temp[i].second] 其中 i=0….7