Реализация плохих соседей TopCoder в python

#python #python-3.x #dynamic-programming

#python #python-3.x #динамическое программирование

Вопрос:

Я пытаюсь решить эту проблему в TopCoder, которая заключается в следующем. У меня есть своя реализация, но я не знаю, где я ошибаюсь. Спасибо

Старая песня гласит: «Иди вперед и ненавидь своего соседа», и жители Онетинвилля приняли эти слова близко к сердцу. Каждый житель ненавидит своих ближайших соседей с обеих сторон. Никто не хочет жить дальше от городского колодца, чем его соседи, поэтому город был устроен большим кольцом вокруг колодца. К сожалению, городской колодец находится в аварийном состоянии и нуждается в восстановлении. Вас наняли для сбора пожертвований в фонд Save Our Well.

Каждый из жителей города готов пожертвовать определенную сумму, указанную в пожертвованиях, которые перечислены в порядке по часовой стрелке вокруг колодца. Однако никто не хочет вносить вклад в фонд, в который также внес свой вклад его сосед. Соседние соседи всегда перечислены последовательно в пожертвованиях, за исключением того, что первая и последняя записи в пожертвованиях также относятся к соседям по соседству. Вы должны рассчитать и вернуть максимальную сумму пожертвований, которую можно собрать.

Это моя реализация, но я получаю сообщение о неправильном ответе от судьи.

 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

Комментарии:

1. Вы можете найти, как отлаживать небольшие программы , полезный ресурс для подобных проблем.

2. Вы спрашиваете, что не так. Объяснение идеи, лежащей в основе вашего опубликованного кода, поможет другим дать вам ответ.