Vous souhaitez produire de l'énergie renouvelable en exploitant la force du courant d'une rivière. Un barrage n'est cependant pas la bonne solution, du fait de son impact sur l'environnement (le fait d'inonder toute une zone, de gêner le déplacement des poissons, etc). Vous décidez donc d'installer un système de turbines au fil de l'eau, qui exploitent la force du courant sans bloquer la rivière.
On vous décrit la force du courant mètre par mètre sur toute la longueur des mètres de la rivière. Vous souhaitez placer des turbines au sein d'une centrale couvrant une zone de mètres le long de la rivière. Écrivez un programme qui détermine à quel endroit placer cette zone pour que la somme des forces du courant au sein de cette zone soit la plus grande possible.
Affichez un entier : la plus grande somme possible des forces de courant qu'il est possible d'accumuler sur une longueur de mètres consécutifs de la rivière.
entrée :
3 9 3 2 5 7 4 2 3 8 4
sortie :
16
Pour chaque indice avec , on regarde la somme des forces du courant sur l'intervalle
On calcule d'abord un tableau qui donne le cumul des forces du début jusqu'à tout indice . Ce tableau se construit en temps linéaire.
Pour connaître la force d'une tranche, il suffit de faire une soustraction. Tester toutes les tranches se fait en temps linéaire.
k, n = map(int, input().split()) cumul = [0] ajout = cumul.append # <= très bon réflexe ; performance force_cumulée = 0 for force in map(int, input().split()): force_cumulée += force ajout(force_cumulée) tranche_forte = max(cumul[i + k] - cumul[i] for i in range(n - k + 1)) print(tranche_forte)
Il est parfois utile d'utiliser ce genre de technique, et pas nécessairement avec l'addition, de faire un cumul des valeurs d'un tableau.