Donats dos naturals i i un vector d’ naturals, es vol trobar quina és el mínim del màxim de les sumes dels trossos de quan aquest és tallat en trossos.
Per exemple: Considereu i . Hi ha tres maneres de tallar en trossos: , i . 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:
Primer, escriviu una funció @bool has_max_sum(const vector<int>& v, int m, int x)@ que indiqui si es pot tallar en trossos de forma que el màxim de les sumes dels trossos sigui o menys.
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 en trossos utilitzant @has_max_sum@ astutament.
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 , i que , la suma dels elements del vector, cap en un @int@.
Input
2 4 12 34 67 90 2 4 90 12 34 67 2 5 13 43 65 87 92 3 3 4 6 5 2 2 1 999999999 1 1 3
Output
113 102 179 6 999999999 3