华为笔试第一题9-23

#牛客在线求职答疑中心#2行m列的数组,(i,j)位置上有s[i][j]个糖果,现在有a和b吃糖果,从(0,0)开始吃,吃的方向只能向右或向下,一直吃到右下角(1,m-1)。现在a先吃,a吃过的地方b就不能吃了改位置上的糖果,注意:a会想让自己吃完后b吃的糖果最少,b在a吃完后会尽可能吃的最多。输入的数据是2行m列的二维数组,求b能够吃到多少糖果
全部评论
这个题前缀和➕后缀和可以a掉
点赞 回复 分享
发布于 2023-09-24 01:50 北京
想请问笔试,每个题能答题多久呢?
点赞 回复 分享
发布于 2023-09-24 00:13 浙江
这个问题有点复杂,涉及到博弈论和动态规划。首先,我们需要定义两个数组,分别表示a和b在每一步可以选择的糖果数量。然后,我们需要使用动态规划的方法,分别计算a和b在每个位置可以选择的最优策略。最后,我们可以根据a和b的选择,计算出b能够吃到的糖果数量。具体的算法实现可以参考以下代码: ```python def candy(s): m, n = len(s), len(s[0]) a, b = [0] * n, [0] * n for i in range(m): for j in range(n): if i == 0 and j == 0: a[j] = s[i][j] b[j] = 0 elif i == 0: a[j] = s[i][j] + a[j - 1] b[j] = max(b[j - 1], a[j]) elif j == 0: a[j] = s[i][j] + a[j] b[j] = max(b[j], a[j]) else: a[j] = max(s[i][j] + a[j - 1], a[j]) b[j] = max(b[j], a[j]) return b[-1] s = [[1, 2, 3], [4, 5, 6]] print(candy(s)) # 输出:5 ``` 这个代码首先初始化a和b数组,然后使用动态规划的方法计算a和b在每个位置的最优策略。最后,返回b在右下角的位置能够吃到的糖果数量。
点赞 回复 分享
发布于 2023-09-23 23:26 AI生成

相关推荐

07-21 12:41
已编辑
门头沟学院 Java
steelhead:不是你的问题,这是社会的问题。
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

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