important
programmation dynamique
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
Python Console Session >>> 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.
.128013b];=wlSd[f-:*431(gnahp/+uerovm)6 x72i,y9éc8s_Ptk05050i0A0V0u0L0g0S0H0Q0g0u0S0S0e010V0L0w010406050S0z0E0E0u0B0N040h0C0g0z0?0C0t050x0}0 11130{0w04051j1c1m0x1j0{0i0L0D0+0-0/0;0-0t0s0z0u0s0A0l0w0N0V0v1a0H0v0L0s0v0g1O0v0V0_050$0b0g0A1v0.0:011N1P1R1P0V1X1Z1V0V0B1k1J0+160S0w0u0t0;0K011#1x010k0(0A0t0u0E0A1V1`1|211%241Z27290_0a0H0U0B0C0w0C0S0L190t0H0!1^0B0B0A0Q2u1c2c0t1k0x1J2H1;1?1=1W0i2e1y0L0t262r1V1s1u0,1$2R2T0t0C2X1V0w2A1k2F2H2.0|1{2v2Z222%0B100g1V0u1M2A0k0;030T0T0Q2(0A1R2$0C0l0q3c0_0H0q1c0u2/2=0`2;2d2@1%2_2{2}2 0A3101333537392U3c0l1 040H0K3i3k1|3m2F2Q013r0u2|1k2~0v303234360!3B2%3D0p3f0p3J2E3l0{3N3p0;3Q3S053U3W3x3Y3A2S3C3d0o3f0o3+1d3-3n2?1w3q0C2`3R3t3V3v3X3z3!3}3$3d0Y3f0Y432.3.2=3O3=4d3_3y3Z384j3b3d0G3f0G4p453/483;4a3s3T3u3w4x3|3a3D0J3f0J4G3L4r3o4J3P4L4c4N4e4P3{4i4S3d0R3f0R4X2G4Z472!4$4b3?3^4f3`4h4z4.0l0O3f0O4?3M4s3:4{4M3@4O4g4y3#4B3c0X0_0q0X584^4t4%4}5f505h4A3D0q0q5m3h0x3j3,4Y465r4|4v4 4Q4-3~3c3F0q3I5D3K4@5H5b4u4)4w4,525O0q3(045(5p5W4#5Y5e4*5g4R5%405*425T5F5V4I4`5/4~4+515i5y4m5*4o5{445G5~2^5s5K625w530q4D5*4F692:1p2,1c2X2K0i1?2P5b4y2W1t1k2+0A2-3l5|1k4y6E2d0L0i0;342F5y3t6L6N635x3d5A0H2i0A6T6h5%1V5{6c1%0W0_0!0k6G5-4`0f3f6:6*3;0k0_0S0C0 0A0T100I6^5a4#0^040r744!5 0_1X7a4_22770F0m6G0{6a2G5H6S016O2=3D3F5e7q5#643d1 6Y286!7r6U537v5T0H7K0H6;2^0_1b7n3G7N1%0C0_0e6G7M6_3P0b0_2h7f3O77797R7T3;7d0u0b7)5b7i7l7)7x0T6P3d5)7w6M7F6$4k0l3(7C296#5?847 7J7L7.3P6|6~290S710u737R7Z754`7V047X8o8f770j7?4#0E0L0_5o7-7!770c7Y8f8s0n8J7!0t7P7_8F4s7{7}0l5^80895N8440877E7y6V8W6(3j7L8p7b7O046}6 8k728z4`8x8`228B8D8}1%8H8N8q228s8u2.8/7g3q7:7=8S8:920_8y9f9b0;8 048E2:8G0_8I7R7m9q8T817s1|3D668Y828a5j4m8%8Z5$849C8d7K8f0Q5A04030H1L0Q3R0Q0z1Z0H0-0H0w170*0s0B1|2x8?290H0S1!0V0A2`2S1|0V0H260H0L8R9w6K9y7|7t4C6Ra4835j4D9I9E8!ab8,3G8e7!6,040k4a949g7/04a08v7!0C6?as7Q998f0t7$049,1A0A910;7+aI019n5Ca29l01770MapaQ8P04az6F9r047ja1aZ9x6T8V4U4N7{aa4T206Z9J7z0la,3J8.8.8fal0L6/au959c8=8i0A8^8maL8|9k4t0_ataAav0_0laU3OaNb99sbj5b8s0ybo5.9dbm049jaPbcasbv9tbfb20;8s020s0V0dbs7c047ebb7@9iaLaWbea(aqaR9s7k9u7`a48V4:a-a99F3D4:ad8)53b(a`a{b?aB8h8@8l8nbybQbwbSbdbBbL967Wc3b39/b6b{bvbxbVaVc1b1bW8sbicgaQblbP76bnck3Obqc6arbOb}cob cnbMbU3L8wcp4qb#a*a654a8a?8*55b.7G5O552H8-b?9a3Oal389=bvbZcFbb8UcI5ncKae9K5jc*cOa/6W5lcSaicUajbE8gb4b`8_cz7hbRd0b3cB7oa!bC3lcVbpc5cq5Xbud3aJd2cwcAc2b!c%b$c)9R9Db/5%6Xa=c,a@5zaha|7!9Q0_9T1L9~0i0P0i0z2t9#2~9(0z9*aF9.b52w1!0Q381Z0S0l0Qd53mdncH9A6W7v2~a.b+d+a;7DcL6i7IcT9O8O0_720L0E0~ct0197e19n9p45d(7F8V5(c+ds84ebc:d/3c8cd_da4#alan0Be1bTe1awbdaY3Lel5 aDaF1Ebv7,dj8~8C5*bvaTddbtaXbva$dmbyc(d*3c8Xd-b*af5y8$dvedc.8X9Na{a}bdb0bDbWaWc8b7b|cd7*die?debAdgbX04d8ewexc404bHbJeqb_8jcae|baeEb3d}d 0EbBc#e7eQdoeS0q9CeVd?5%9He!cPee9Mekc_b^04fee0eK8rdce-cee{c$fkd)0t5y6kdrfuc.acftc;3cfOe(e*aE0#0z0Bev2Gf1c7b5e;cbc0fA8md~fCfcdhe~a%cC0x6I1n6q0x6s1c0V6ug12N2I7;1Z2H6s7m0!0$0(0S04.
# Tests(insensible à la casse)(Ctrl+I)
(Alt+: ; Ctrl pour inverser les colonnes)
(Esc)