Три подсписки не перекрываются и являются непрерывными для каждого.
Я стараюсь использовать метод DP, чтобы найти лучшее решение.
Приведенный ниже код не работает.
def max_reward_schedule(rewards, task_durations):
n = len(rewards)
m = len(task_durations)
# Initialize DP table
dp = [[0] * (n + 1) for _ in range(m + 1)]
# Fill DP table, from the m to the n, to find the best reward
for i in range(1, m + 1):
for j in range(1, n + 1):
if j >= task_durations:
if j - task_durations == 0:
dp[j] = max(dp[j], dp[j -
task_durations] + sum(rewards[j - task_durations:j]))
else:
dp[j] = max(dp[j], max(max(dp
[:j -
task_durations[i - 1]]), max(dp[i - 1][j + task_durations[i]]
sum(rewards[j - task_durations[i - 1]:j]))
else:
dp[i][j] = dp[i - 1][j]
print(dp)
return max_reward
rewards_24_hours = [8, 6, 5, 6, 1, 1, 4, 4, 5, 2, 6, 8]
task_durations = [3,2,4]
max_reward = max_reward_schedule(rewards_24_hours, task_durations)
Подробнее здесь: https://stackoverflow.com/questions/793 ... for-a-list
Мобильная версия