Cod sursa(job #1292093)

Utilizator cristian.caldareaCaldarea Cristian Daniel cristian.caldarea Data 13 decembrie 2014 17:13:41
Problema Lapte Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.19 kb
#include <fstream>
using namespace std;

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

const int Dim = 151, Inf =0x3f3f3f3f;

int n, l, t;
int cost[Dim][Dim], d[Dim][Dim], a[Dim], b[Dim];

void Write(int x, int y, int z);

int main()
{
    fin >> n >> l;
    for (int i = 1; i <= n; ++i)
        fin >> a[i] >> b[i];
    for ( t = 1; t <= 100; ++t)
    {
        for (int i = 0; i <= n; ++i)
            for (int j = 0; j <= l; ++j)
                d[i][j] = -Inf;
        d[0][0] = 0;
        for (int i = 1; i <= n; ++i)
            for (int j = 0; j <= l; ++j)
                for( int k = 0; k * a[i] <= t; k++ )
                if ( d[i][j] < d[i-1][j-k] + (t - k * a[i]) / b[i])
                    {
                        cost[i][j] = k;
                        d[i][j] = d[i-1][j-k] + (t-k*a[i]) / b[i];
                    }
        if (d[n][l] >= l)
        {
            fout << t << "\n";
            Write(n, l, t);
            break;
        }
    }
    return 0;
}
void Write(int x, int y, int z)
{
    if (x != 0)
    {
       Write(x-1, y-cost[x][y], y);
        fout<< cost[x][y] << " " << (t - cost[x][y]*a[x]) / b[x] << "\n";
    }
}