TopCoder在python中的实现

2024-10-06 09:49:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图在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


Tags: inforlenreturnif基金地方table