Pagini recente » Cod sursa (job #2704614) | Cod sursa (job #2922489) | Cod sursa (job #2141282) | Cod sursa (job #413071) | Cod sursa (job #1426614)
#include <vector>
#include <fstream>
using namespace std;
//care este cel mai bun mod de a imparti primele d numere in k parti
int f(const int d, const int k, const vector<int>& sume_part,
const vector<int>& maxim_pana_la){
if(d == 1){
return sume_part[0]; }
else if(k >= d){
return maxim_pana_la[d-1]; }
else if(k == 1){
return sume_part[d-1]; }
else{
int rez = sume_part[d], tmp;
for(int nr_scoase = d-1; nr_scoase >= k-1; --nr_scoase){
tmp = max(f(nr_scoase, k-1, sume_part, maxim_pana_la),
sume_part[d-1] - sume_part[nr_scoase-1]);
rez = min(tmp, rez); }
return rez; } }
void citeste(int& n, int& k, vector<int>& sume_part, vector<int>& maxim_pana_la){
ifstream f("transport.in");
f >> n >> k;
sume_part.resize(n);
maxim_pana_la.resize(n);
for(int i = 0, x, s = 0, M = -1; i < n; ++i){
f >> x;
s += x;
M = max(M, x);
sume_part[i] = s;
maxim_pana_la[i] = M; } }
int main(){
int n, k;
vector<int> sume_part, maxim_pana_la;
citeste(n, k, sume_part, maxim_pana_la);
ofstream g("transport.out");
g << f(n, k, sume_part, maxim_pana_la);
return 0; }