华为笔试第一题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掉
想请问笔试,每个题能答题多久呢?
这个问题有点复杂,涉及到博弈论和动态规划。首先,我们需要定义两个数组,分别表示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在右下角的位置能够吃到的糖果数量。
相关推荐

点赞 评论 收藏
分享
点赞 评论 收藏
分享
点赞 评论 收藏
分享