【Python】京东数据分析工程师笔试题

Q1:滚球游戏

图片说明

思路:
动态规划,dp[i][j]表示走到第i层第j个位置的最大和。
注意边界情况的处理:

  1. 最左端点只能从右上端点滚动到达;
  2. 左端第二个点只能从上端点和右上端点滚动到达;
  3. 最右端点只能从左上端点滚动到达;
  4. 右端第二个点只能从上端点和左上端点滚动到达;
  5. 剩余点可以从左上,上,右上三个端点滚动到达。
n = int(input())
nums = []
for i in range(n):
    nums.append([int(x) for x in input().split()])

# dp[i][j]表示走到第i层第j个位置的最大和
dp = [[0 for _ in range(2*n-1)] for _ in range(n)]
dp[0][n-1] = nums[0][0]

for i in range(1,n):
    for j in range(n-i-1, n+i):
        if j==n-i-1: # 左端一点,只有右上点可到达
            dp[i][j] = dp[i-1][j+1] + nums[i][0]
        elif j==n-i: # 左端二点,只有上和右上可到达
            dp[i][j] = max(dp[i-1][j], dp[i-1][j+1]) + nums[i][1]
        elif j==n+i-1: # 右端一点,只有左上点可到达
            dp[i][j] = dp[i-1][j-1] + nums[i][-1]
        elif j==n+i-2: # 右端二点,只有左上点可到达
            dp[i][j] = max(dp[i-1][j-1], dp[i-1][j]) + nums[i][-2]
        else:
            dp[i][j] = max(dp[i-1][j-1], dp[i-1][j], dp[i-1][j+1]) + nums[i][j-(n-i-1)]

print(max(dp[n-1]))

Q2:数据变换

图片说明

全部评论

相关推荐

谁知道呢_:要掉小珍珠了,库库学三年,这个结果
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务