Cod sursa(job #658985)

Utilizator psycho21rAbabab psycho21r Data 9 ianuarie 2012 21:07:59
Problema Lapte Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.56 kb
#include <iostream>
#include <fstream>
#include <utility>
#include <vector>
#include <stack>

using namespace std;

int main ()
{
    ifstream in("lapte.in");
    int N, L, temp1, temp2;
    in >> N >> L;
    vector < pair <int,int> > pers;
    pair <int,int> temp;
    for(int i = 0; i < N; ++i)
    {
        in >> temp1 >> temp2;
        temp.first = temp1;
        temp.second = temp2;
        pers.push_back(temp);
    }
    in.close();
    int SL[101][101], LS[101][101];
    int T;
    for (T = 1; T <= 100; ++T)
    {
        for (int i = 0; i <= N; ++i)
            for (int j = 0; j <= L; ++j)
                SL[i][j] = -100000;
        SL[0][0] = 0;
        for (int i = 1; i <= N; ++i)
            for (int AB = 0; AB <= L; ++AB)
                for (int A = 0; A*pers[i-1].first <= T; ++A)
                    if (SL[i][AB] < (SL[i-1][AB-A] + (T - A*pers[i-1].first)/pers[i-1].second))
                    {
                        SL[i][AB] = SL[i-1][AB-A] + (T - A*pers[i-1].first)/pers[i-1].second;
                        LS[i][AB] = A;
                    }
        if(SL[N][L] >= L)
            break;
    }
    ofstream out("lapte.out");
    out << T << "\n";
    stack <int> sol;
    for (int n = N; n >= 1; --n)
    {
        sol.push((T - LS[n][L]*pers[n-1].first)/pers[n-1].second);
        sol.push(LS[n][L]);
        L -= LS[n][L];
    }
    while(sol.size())
    {
        out << sol.top() << " ";
        sol.pop();
        out << sol.top() << "\n";
        sol.pop();
    }
    out.close();
    return 0;
}