Реализация BadNeighbors TopCoder в Python - PullRequest
0 голосов
/ 18 апреля 2019

Я пытаюсь решить эту проблему в 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...