牛牛下象棋—京东架构师笔试

本文介绍了一道关于象棋中马走法的问题,并使用动态规划求解马经过K次移动后落在指定坐标的不同路径数量。通过定义状态转移方程,实现了高效的计算。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目:象棋中马走“日”字型,以棋盘的左下角为原点,向上为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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值