Cod sursa(job #1453306)

Utilizator MDianaMarusic Diana MDiana Data 23 iunie 2015 10:57:06
Problema Transport Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.9 kb
#include <iostream>
#include <fstream>
#include <math.h>

using namespace std;

ifstream fin("transport.in");
ofstream fout("transport.out");

int n, k, sum, minim;
int A[17000];



void Alg(int l, int h){
    int m, sum = 0;
    if(l >= h)
        fout << minim;
    else{
        m = round((l+h)/2.0);
        int res = 1;
        int i = 0;
        for(int  i = 0; i<n; i++){
            sum+=A[i];
            if(A[i] > m)
                l++;
            else
            if(sum > m){
                res++;
                if(sum - A[i] < minim && res == k)
                    minim = sum - A[i];
                sum = A[i];
            }
        }
        Alg(l, m-1);
    }
}

int main(){
    minim = 32000;
    fin >> n >> k;
    sum = 0;
    for(int i = 0; i < n; i++ ){
        fin >> A[i];
        sum += A[i];
    }
    Alg(sum/k+1, sum);
    return 0;
}