我试图在TopCoder中解决这个问题,如下所示。我有自己的实现,但不知道哪里出了问题。谢谢
老歌说“去吧,恨你的邻居”,而内滕维尔的居民已经把这些话铭记在心。每一个居民都讨厌他两边的邻居。没有人比他的邻居更愿意住在离镇上的井远的地方,所以镇上被安排在井周围的一个大圆圈里。不幸的是,镇上的水井年久失修,需要修复。你被雇来为“拯救我们的井”基金募捐。你知道吗
镇上每一位居民都愿意捐赠一定数额的善款,按照捐赠的具体情况,按顺时针顺序排列在水井周围。然而,没有人愿意为他的邻居也为之捐款的基金捐款。隔壁邻居总是被连续地列在捐赠中,除了捐赠的第一个和最后一个条目也是为隔壁邻居。您必须计算并返回可以收集的最大捐赠金额。你知道吗
这是我的实现,但是,我从法官那里得到了错误的答案。你知道吗
def badNeighbors(donation:[int]) -> int:
globalmax = 0
if len(donation) == 0:
return 0
table = [[0,0] for _ in range(len(donation))]
table[0][1] = 1
for i in range(len(donation)):
table[i][0] = donation[i]
for j in range(i):
if j != i-1:
if table[i][0] < donation[i] + table[j][0]:
table[i][0] = donation[i] + table[j][0]
if table[j][1] == 1:
table[i][1] = 1
else:
table[i][1] = 0
# print(table)
if table[-1][1] == 1:
table[-1][0] = table[-1][0] - table[0][0]
return max(table)[0]
我能够通过的示例测试用例: 测试#1
{ 10, 3, 2, 5, 7, 8 }
19
最高捐赠额为19,达到10+2+7。最好是10+5+8,除非10和8的捐款来自邻居。你知道吗
测试#2
{ 11, 15 }
15
测试#3
{ 7, 7, 7, 7, 7, 7, 7 }
21
测试#4
{ 1, 2, 3, 4, 5, 1, 2, 3, 4, 5 }
16
测试#5
{ 94, 40, 49, 65, 21, 21, 106, 80, 92, 81, 679, 4, 61, 6, 237, 12, 72, 74, 29, 95, 265, 35, 47, 1, 61, 397, 52, 72, 37, 51, 1, 81, 45, 435, 7, 36, 57, 86, 81, 72 }
2926
目前没有回答
相关问题 更多 >
编程相关推荐