Minimitzar el màxim de les sumes

Donats dos naturals mm i nn i un vector vv d’nn naturals, es vol trobar quina és el mínim del màxim de les sumes dels trossos de vv quan aquest és tallat en mm trossos.

Per exemple: Considereu m=2,n=4m=2, n=4 i v=[12,34,67,90]v=[12, 34, 67, 90]. Hi ha tres maneres de tallar vv en mm trossos: [12|34,67,90][12 \vert 34, 67, 90], [12,34|67,90][12, 34 \vert 67, 90] i [12,34,67|90][12, 34, 67 \vert 90]. En el primer cas, el primer tros suma 12 i el segon suma 191. Per tant el màxim de les sumes és 191. Pel segon cas el màxim de les sumes és 157, i pel tercer cas el màxim de les sumes és 113. Per tant, el mínim dels màxims de les sumes és 113.

Resoleu el problema en tres passos:

  1. Primer, escriviu una funció @bool has_max_sum(const vector<int>& v, int m, int x)@ que indiqui si es pot tallar vv en mm trossos de forma que el màxim de les sumes dels trossos sigui xx o menys.

  2. Després, escriviu una funció @int min_max_sum(const vector<int>& v, int m)@ que retorni el mínim dels màxims de les sumes de vv en mm trossos utilitzant @has_max_sum@ astutament.

  3. Finalment, descriviu en un comentari a l’inici del programa quina és l’estratègia del vostre algorisme i quin és el seu cost.

Descarregueu el fitxer code.cc per trobar l’esquelet del codi i el comentari i la implementació del programa principal. Podeu assumir que nm1n\geq m\geq 1, i que SS, la suma dels elements del vector, cap en un @int@.

Informació del problema

Autoria: Jordi Petit i Jordi Cortadella

Generació: 2026-01-25T10:18:22.490Z

© Jutge.org, 2006–2026.
https://jutge.org