京东2019春招算法工程师笔试题-牛牛下象棋(编程题3)
这次京东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)相关推荐
- 京东2019春招算法工程师笔试 题解 临时版
前言 不想填坑,永久临时版←_← 这次的笔试编程题是我见过最水的...一着急20分钟就全解决了... 可惜商汤的编程赛比较坑...白让我这么着急做题 第一题 偶数素因数只有2,所以只需要把所有的2分配 ...
- 数据分析真题日刷 | 京东2018秋招数据分析工程师笔试题
今日真题 京东2018秋招数据分析工程师笔试题(来源:牛客网) 题型 客观题:单选18道,不定项选择12道 主观题:编程2道 完成时间 120分钟 牛客网评估难度系数 3颗星 写到「数据分析真题日刷」 ...
- 【笔试题目整理】京东2018秋招数据分析工程师笔试题
最近在准备数据分析岗位的笔试,整理了牛客网上的一些试题与答案方便查看. ps:在牛客网搜索框搜索"数据分析",点击搜索分类版块"试卷"即可看到笔试套题. 套题信 ...
- 京东2019春招Java工程师编程题题解
生成回文串 题目描述 对于一个字符串,从前开始读和从后开始读是一样的,我们就称这个字符串是回文串. 例如"ABCBA","AA","A"是回 ...
- 京东2018春招java_京东2019春招Java工程师编程题题解
生成回文串 题目描述 对于一个字符串,从前开始读和从后开始读是一样的,我们就称这个字符串是回文串. 例如"ABCBA","AA","A"是回 ...
- 京东2019春招Java开发类笔试题
京东2019春招Java开发类笔试题 1. (单选题) 在对问题的解空间树进行搜索的方法中,一个结点有多次机会成为活结点的是 ( B ) A. 动态规划 B. 回溯法 C. 分支限界法 D. 回溯法和 ...
- 名企笔试:京东 2016 算法工程师笔试题(登楼梯)
名企笔试:京东 2016 算法工程师笔试题(登楼梯) 2017-02-04 算法爱好者 有一段楼梯台阶有 15 级台阶,以小明的脚力一步最多只能跨 3 级,请问小明登上这段楼梯,有多少种不同的走法? ...
- 数据、运营相关试题(二)【牛客网:京东2019春招产品运营类试卷】
试题来源:牛客网 试题答案仅供参考.其中前半部分偏向产品运营类试题,后半部分偏向综合测试类试题. 数据.运营相关内容,一起好好学习,天天向上吧! 数据.运营相关案例问答题(一)[牛客网:数据分析试题广 ...
- 数据、运营相关试题(一)【牛客网:京东2019春招商务与运营类试卷】
试题来源:牛客网 试题答案仅供参考.其中前半部分偏向商务类试题,后半部分偏向运营类试题. 数据.运营相关内容,一起好好学习,天天向上吧! 数据.运营相关案例问答题(一)[牛客网:数据分析试题广场] 数 ...
最新文章
- Python爬一下抖音上小姐姐的视频~
- 【复盘】第一次灌鸡汤
- 中方:开展科技合作应秉持开放、合作、包容心态
- Mac/Ubuntu 上编译、搭建 WebRtc/licode 服务器
- python parser count_8个超实用的Python脚本,收藏备用
- 检测直线方法 python
- Spring之注入集合值
- 【咕嘎批量图片查找助手】如何批量根据图片文件名批量查找图片库,移动或复制到指定文件夹保存
- RSA算法进行加密和解密
- tk/tkx canvas区域放大的代码
- 产品设计有哪些原则?
- 北大软件“软件成分分析与漏洞检测工具”(CoBOT—SCA)正式发布
- win7关机快捷键_总说win7最好用,不知这些强大的功能,怎知你的win10好不好用?...
- 串级PID和 前馈系统
- mysql 计算gps坐标距离_mysql 下 计算 两点 经纬度 之间的距离(转)
- 基于5G的智慧养殖 | PPT分享
- matlab里BP神经网络实现实例2汽油辛烷值预测
- python 爬取淘宝模特信息
- 各大厂Linux面试题汇总,足够你学习的,不够找我
- 基于Java+Swing+Mysql实现汽车信息管理系统