9.6腾讯笔试第5题红黑棋

这道题目测是动态规划,但是不好证明算法的正确性。
考虑从左往右放棋子,dp[i][j]表示放i个棋子,其中j个红棋,i-j个黑棋,并且这些红棋和黑棋都递增的最小移动步数,这里猜测剩余还没有考虑的棋子的顺序一定是确定的,否则dp的解法是错误的。那么剩余没摆放的棋子的序列是什么,应该就是原序列删除前j个红棋和前i-j个黑棋的序列,这里把这些棋挪到最前面,剩余棋子的相对顺序应该是不变的,如果变化了,那么保持不变可减少几步移动,这里出题人应该有严格证明。

接下来就是考虑dp转移了,在dp[i][j]状态上,下一个要放的棋子要么是j+1红棋,或者i-j+1黑棋,因此状态会转移到dp[i+1][j+1]和dp[i+1][j],转移代价是多少,就是剩余序列中第j+1红棋和i-j+1黑棋移动到下标i+1的距离,因为这里状态已经是O(n^2)的复杂度,所以转移的复杂度必须是O(1),所以要预处理r[i][j],b[i][j]表示前i小红棋和前j小黑棋都移动到最前面,剩余序列第i+1红棋所在位置和第j+1黑棋所在位置,这里红黑分开处理;比如考虑第i+1红棋所在位置,那么原序列中比i+1大的红棋必然在红棋前面,这个直接统计一下,剩下就是看原序列中比j大的黑棋,j从大到小枚举,也就是算r[i][n],r[i][n-1],...,r[i][1], 由于j从大到小递减,那么r的值肯定是递增的,这里自己想一下,很难描述。
#腾讯##笔试题目#
全部评论
我晚会贴个代码
1 回复 分享
发布于 2020-09-07 07:19
红黑棋题解!:https://blog.csdn.net/qq_38649940/article/details/108438347 (就是ARC原题...bit预处理然后dp!
点赞 回复 分享
发布于 2020-09-07 11:57
可以贴下代码吗?
点赞 回复 分享
发布于 2020-09-07 00:51

相关推荐

哈哈哈哈哈哈哈哈哈哈这个世界太美好了
凉风落木楚山秋:毕业出路老师不管,你盖个章他好交差就完事了,等你盖完毕业了就不关他事情了
点赞 评论 收藏
分享
机械打工仔:我来告诉你原因,是因为sobb有在线简历,有些HR为了快会直接先看在线简历,初步感觉不合适就不会找你要详细的了
投了多少份简历才上岸
点赞 评论 收藏
分享
评论
3
5
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务