|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
今天的题目:
给定一个表示分数的非负整数数组。
玩家 1 从数组任意一端拿取一个分数,随后玩家 2 继续从剩余数组任意一端拿取分数,然后玩家 1 拿,……。
每次一个玩家只能拿取一个分数,分数被拿取之后不再可取,直到没有剩余分数可取时游戏结束。
最终获得分数总和最多的玩家获胜。
给定一个表示分数的数组,预测玩家 1 是否会成为赢家。假设每个玩家的玩法都会使他的分数最大化。
示例 1:
输入:[1, 5, 2]
输出:False
解释:一开始,玩家 1 可以从 1 和 2 中进行选择。
如果他选择 2(或者 1),那么玩家 2 可以从 1(或者 2)和 5 中进行选择。如果玩家 2 选择了 5,那么玩家 1 则只剩下 1(或者 2)可选。
所以,玩家 1 的最终分数为 1 + 2 = 3,而玩家 2 为 5。
因此,玩家 1 永远不会成为赢家,返回 False。 示例 2:
输入:[1, 5, 233, 7]
输出:True
解释:玩家 1 一开始选择 1。然后玩家 2 必须从 5 和 7 中进行选择。无论玩家 2 选择了哪个,玩家 1 都可以选择 233。
最终,玩家 1(234 分)比玩家 2(12 分)获得更多的分数,所以返回 True。
 欢迎大家一起答题! 
已修改 如下
- def fun352(arr):
- M = len(arr)
- if M == 1:
- return True
- dictionary = dict()#存储形式 (起始,终止):(先手,后手) 起始终止 和切片一致
- for index in range(0,M-1):
- A = arr[index]
- B = arr[index+1]
- if A < B:
- dictionary[(index,index+2)]=(B,A)
- else:
- dictionary[(index,index+2)]=(A,B)
- for index in range(3,M+1):
- for inner in range(0,M+1-index):
- choose1 = arr[inner]
- before1 = dictionary[(inner+1,inner+index)][0]
- after1 = dictionary[(inner+1,inner+index)][1]
- result1 = (choose1+after1,before1)
-
- choose2 = arr[inner+index-1]
- before2 = dictionary[(inner,inner+index-1)][0]
- after2 = dictionary[(inner,inner+index-1)][1]
- result2 = (choose2+after2,before2)
- if result1[0]>result2[0]:
- dictionary[(inner,inner+index)] = result1
- else:
- dictionary[(inner,inner+index)] = result2
- if dictionary[(0,M)][0]>dictionary[(0,M)][1]:
- return True
- else:
- return False
复制代码
|
|