这次京东2019的春招算法工程师笔试时间是2018-04-09 19:00~21:00,其中有三道编程题目,当时就做了2个,后一个时间原因就没做,就截了一个图,今天又突然看到了,练练手吧哈。

题目要求:

最近牛牛开始向犇犇老师学习下中国象棋了。犇犇老师告诉他,象棋中的“马”走日字型,如下图,红色表示马能调到的位置。

以棋盘左下角为原点,向上为y轴正方向,向右为x轴正方向,建立坐标系。牛牛想知道,棋盘左下角的马,经过K次移动之后,落在坐标系 (X, Y) 的情况有多少种。当任意一次移动后马的位置不同时,两种情况被认为不同。

因为答案可能很大,请输出情况数取模1000000007的结果。

输入描述:

输入K,一个正整数,表示移动的步数(K<=100000)
输入X, Y表示坐标且X(0<=X<=8), Y(0<=Y<=8)

题目分析:

 动态规划解法
令 f[r][c][steps]表示, 经过steps步之后落在棋盘(r, c) 上的次数。则dp递推方程如下: 
 f[r][c][steps]= ∑ f[ri+dr][cj+dc][steps−1]  (注意前面有个累计符号哦)
(1)解释,dr, dc 表示steps-1 ----> steps步的偏量,且r = ri+dr,c = cj+dc,也就是,只要在steps-1的步骤中,所有可能的位置到达steps步骤中的(r, c),的次数总和,就是steps步骤中(r, c)的次数。
(2)最后,只要取出在最后一步棋盘上位置上的次数就可以了。
(3)现在看看优化问题,很显然,在每一个steps步骤中,只需要当前步骤steps的数据,和前一个steps-1的数据,就可以完成计算,所以f[r][c][steps] 这个3维数组,完全可以用两个2维数组代替。 所以用,dp2表示 f[][][steps],用dp表示f[][][steps-1]
(4)仔细看看输入描述,你会发现它明明要是的X(0<=X<=8), Y(0<=Y<=8)它让我想到了国际象棋,其实这个题目是LeetCode:688. Knight Probability in Chessboadr的一个变种。

Python3实现:

# 京东2019的春招算法工程师笔试时间是2018-04-09 19:00~21:00-编程题3
# @Time   :2018/5/13
# @Author :LiuYinxing
# 解题思路: 动态规划
# 时间复杂度 O(N^2K) 空间复杂度 O(N^2)class Solution:def knightNumber(self, K, x, y):dp = [[0] * 9 for _ in range(10)]  # 初始化dpdp[0][0] = 1for _ in range(K):dp2 = [[0] * 9 for _ in range(10)]  # 初始化当前dpfor r in range(10):for c in range(9):for dr, dc in zip((2, 2, -2, -2, 1, 1, -1, -1), (1, -1, 1, -1, 2, -2, 2, -2)):  # 八个方向if 0 <= r + dr < 10 and 0 <= c + dc < 9:  # 判断是否出界dp2[r+dr][c+dc] += dp[r][c]dp = dp2return dp[y][x] % 1000000007  # 取模if __name__ == '__main__':solu = Solution()print(solu.knightNumber(4, 3, 3))

发现问题,记得留言指教哦

京东2019春招算法工程师笔试题-牛牛下象棋(编程题3)相关推荐

  1. 京东2019春招算法工程师笔试 题解 临时版

    前言 不想填坑,永久临时版←_← 这次的笔试编程题是我见过最水的...一着急20分钟就全解决了... 可惜商汤的编程赛比较坑...白让我这么着急做题 第一题 偶数素因数只有2,所以只需要把所有的2分配 ...

  2. 数据分析真题日刷 | 京东2018秋招数据分析工程师笔试题

    今日真题 京东2018秋招数据分析工程师笔试题(来源:牛客网) 题型 客观题:单选18道,不定项选择12道 主观题:编程2道 完成时间 120分钟 牛客网评估难度系数 3颗星 写到「数据分析真题日刷」 ...

  3. 【笔试题目整理】京东2018秋招数据分析工程师笔试题

    最近在准备数据分析岗位的笔试,整理了牛客网上的一些试题与答案方便查看. ps:在牛客网搜索框搜索"数据分析",点击搜索分类版块"试卷"即可看到笔试套题. 套题信 ...

  4. 京东2019春招Java工程师编程题题解

    生成回文串 题目描述 对于一个字符串,从前开始读和从后开始读是一样的,我们就称这个字符串是回文串. 例如"ABCBA","AA","A"是回 ...

  5. 京东2018春招java_京东2019春招Java工程师编程题题解

    生成回文串 题目描述 对于一个字符串,从前开始读和从后开始读是一样的,我们就称这个字符串是回文串. 例如"ABCBA","AA","A"是回 ...

  6. 京东2019春招Java开发类笔试题

    京东2019春招Java开发类笔试题 1. (单选题) 在对问题的解空间树进行搜索的方法中,一个结点有多次机会成为活结点的是 ( B ) A. 动态规划 B. 回溯法 C. 分支限界法 D. 回溯法和 ...

  7. 名企笔试:京东 2016 算法工程师笔试题(登楼梯)

    名企笔试:京东 2016 算法工程师笔试题(登楼梯) 2017-02-04 算法爱好者 有一段楼梯台阶有 15 级台阶,以小明的脚力一步最多只能跨 3 级,请问小明登上这段楼梯,有多少种不同的走法? ...

  8. 数据、运营相关试题(二)【牛客网:京东2019春招产品运营类试卷】

    试题来源:牛客网 试题答案仅供参考.其中前半部分偏向产品运营类试题,后半部分偏向综合测试类试题. 数据.运营相关内容,一起好好学习,天天向上吧! 数据.运营相关案例问答题(一)[牛客网:数据分析试题广 ...

  9. 数据、运营相关试题(一)【牛客网:京东2019春招商务与运营类试卷】

    试题来源:牛客网 试题答案仅供参考.其中前半部分偏向商务类试题,后半部分偏向运营类试题. 数据.运营相关内容,一起好好学习,天天向上吧! 数据.运营相关案例问答题(一)[牛客网:数据分析试题广场] 数 ...

最新文章

  1. Python爬一下抖音上小姐姐的视频~
  2. 【复盘】第一次灌鸡汤
  3. 中方:开展科技合作应秉持开放、合作、包容心态
  4. Mac/Ubuntu 上编译、搭建 WebRtc/licode 服务器
  5. python parser count_8个超实用的Python脚本,收藏备用
  6. 检测直线方法 python
  7. Spring之注入集合值
  8. 【咕嘎批量图片查找助手】如何批量根据图片文件名批量查找图片库,移动或复制到指定文件夹保存
  9. RSA算法进行加密和解密
  10. tk/tkx canvas区域放大的代码
  11. 产品设计有哪些原则?
  12. 北大软件“软件成分分析与漏洞检测工具”(CoBOT—SCA)正式发布
  13. win7关机快捷键_总说win7最好用,不知这些强大的功能,怎知你的win10好不好用?...
  14. 串级PID和 前馈系统
  15. mysql 计算gps坐标距离_mysql 下 计算 两点 经纬度 之间的距离(转)
  16. 基于5G的智慧养殖 | PPT分享
  17. matlab里BP神经网络实现实例2汽油辛烷值预测
  18. python 爬取淘宝模特信息
  19. 各大厂Linux面试题汇总,足够你学习的,不够找我
  20. 基于Java+Swing+Mysql实现汽车信息管理系统

热门文章

  1. ECharts图标数据过多添加滚动条
  2. 新手如何入门嵌入式软件开发
  3. 电力电子技术-整流电路2
  4. Python实现PDF文件转图片(PNG,JPEG等格式)
  5. 迷你电脑主机的优缺点及应用分析
  6. tq2440 启动代码分析
  7. windows win10+1050ti maxQ 安装cuda1.0和tensorflow-gpu==2.0.0
  8. Cydia崩溃错误修复
  9. Akamai发布《互联网现状》报告,亚太恶意DNS攻击剧增
  10. 乌克兰政府和银行再次遭受DDoS攻击、1亿部三星手机的加密功能存在缺陷|2月24日全球网络安全热点