Somme maximale de termes consécutifs

On considère un tableau non vide de nombre entiers, positifs ou négatifs, et on souhaite déterminer la plus grande somme possible de ses éléments consécutifs.

Par exemple, dans le tableau [1, -2, 3, 10, -4, 7, 2, -5], la plus grande somme est 18 obtenue en additionnant les éléments 3, 10, -4, 7, 2.

Pour cela, on va résoudre le problème par programmation dynamique. Si on note tab le tableau considéré et i un indice dans ce tableau, on se ramène à un problème plus simple : déterminer la plus grande somme possible de ses éléments consécutifs se terminant à l’indice i.

Si on connait la plus grande somme possible de ses éléments consécutifs se terminant à l’indice i - 1, on peut déterminer la plus grande somme possible de ses éléments consécutifs se terminant à l’indice i :

  • soit on obtient une plus grande somme en ajoutant tab[i] à cette somme précédente ;
  • soit on commence une nouvelle somme à partir de tab[i].

Remarque : les sommes considérées contiennent toujours au moins un terme.

Exemples

🐍 Console Python
>>> somme_max([1, 2, 3, 4, 5])
15
>> somme_max([1, 2, -3, 4, 5])
9
>>> somme_max([1, 2, -2, 4, 5])
10
>>> somme_max([1, -2, 3, 10, -4, 7, 2, -5])
18
Compléter le code ci-dessous

Compléter la fonction somme_max ci-dessous qui réalise cet algorithme.

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Ctrl+Clic pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
Évaluations restantes : 5/5

.1280130ldy1,4*-]ké/weibmc_:35aPr+ 7=9o[fgt28;6sSh)(punxv050d0p0K0y0q0c0P0C0t0c0y0P0P0E010K0q0U010406050P0V0s0s0y0A0e040Q0G0c0V0?0G0W050n0}0 11130{0U04051j1c1m0n1j0{0d0q0Y0+0-0/0;0R0q0J0R0c1A0R0K0_050$0r0c0p1v0.0:011z1B1D1B0K1J1L1H0K0A1k0K0R0+160P0U0y0W0;0L011N1x010I0(0p0W0y0s0p1H1*1,1;1P1@1L1`1|0_0a0C0z0A0G0U0G0P0q190W0C0!1(0A0A0p0t2h1c1 0W1k0n1$2u1Z1#1!1I0d210;1D0W1_2e1H1s1u0,1O2E0q2G0W0G2K1H0U2n1k2s2u2Y0|1+2i2M1=2R0A100c0_0C0f2r2$0`2#202(1P2*2,2.0L2;1,2?2s2D012{0y2-040C0w2 2t0{322_0;35370C0h3b312$333h2.0x3l3d3n3f340G2+362.0O3s2@2%1w2`3x2|380D3C3e3F3g3H3z380M3L3u3N3w3y3i0F3T2^3V3p040f0b3!3E2N3W3I0f2:1d2=3t3#3-3%0f2~3=303@3,2)3P370f3a3}3c3D3o420_0f3k463m3^413X4b3r4e3 494i3(3B4e1n2W1c2K2x0d1#2C3v0t2S1}1k4v1l4t2!4r4B0!2X3U3-0l0_0!0I3l0C483v0W0I0_0P0G0 0p0u100X3l4V3V0^040T4+3M3_0_1J4;4N1=4.0S0v3s0C504U4=2)0_1b4e524`1P0G0_0E4T4,3_0r0_244_4g1P4.4:4r532`4@0y0r5k405m0_0S4 515f54044!4$0P4(0y4*575C5a5c5e5q0;4.0H5v330s0q0_3*5p595R0_0k5P5#015b040i5)5l3g555A505M5;5E4#1|5H4)5U3v5S5 3V5W5Y623-4.5(5L5Q5+5O6a5*0W5s5u5!5:01616j5w0;64045Z2!6b685?586k0t0f0_030C1a0+360t0V1L0C0-0C0U170*0J0A1,2k5F1|0C0P1M0K0p2+2P1,0K0C1_0C0q6w5^014P040I3x5/6o340_6,6e6k0G0o6`562Y6x6^0W5h046R0W0J0p664{0_5o6t5*6q3;7g6k4.0g6@3o5=6n334|4~4l517w73336:0q4S6|744Z5{0p5}5J7c5x045T7r4W6`7o3v5,0j7R635X3(7K5$0469726.5,0B7V4?044^7O4-0_7N7k7E046{7?7s5%7+1=5,020J0K0N7}5r7-5t7Z6l7;886g7^88687u2Y067x8j7y7P5`5G5I5K7`608a7/7,7_2=6.6v7D335,5d8A8m6U7H8p8e8t8r3$7Q8E3V7T846p7X7j8x6u7|8O3-7)8R6_866i8L678K8V6f8N8)7d7#6w7w6.6:0p0)7b8u8:8g3?8k7x6.8c8G7I8q8,7l8+30928.976^8z7%6b8C8#8c7.8/7L7=9d7p8d8|7L7$8 5B6b6z6B6D2i6*0d0m0d0V2g6K0y6M6O0C6Q6S1M8G2j1M0t8_1L0P0j0t8w3~8?6b8c4)0q0s0~8#9i8Y1=6q6s9v5@6b6:6=0A9j9c308l8P6 7^712=9~5g0_787a8J4/887ia97n9.85a29a8W044}8=9w5*7A7C9g8-8n5|8I9s7!9oaias9Z2t8y8X72a47~0_80829{at8H5~aw897M8b0_9(9*0sa90k8~9!90an6k9%5J9)9+af0;9-ara%9|3c9#aoa60#0V0Aah2taG8594av9maxaS04aUa+b2aQ9u3~1c4K0p2u2Vbe4u1t4w2x2A2v5t1L2u4v0{0n0!0$0(0P04.