Cod sursa(job #2406535)

Utilizator IoanaDraganescuIoana Draganescu IoanaDraganescu Data 15 aprilie 2019 20:41:38
Problema Lapte Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.46 kb
#include <iostream>
#include <fstream>

using namespace std;

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

int d[105][105], a[105], b[105], n, l, p[105][105];
struct gigi
{
    int x, y;
}v[105];

int verif(int timp)
{
    for (int i = 0; i <= n; i++)
        for (int j = 0; j <= l; j++)
            d[i][j] = -100000000;
    d[0][0] = 0;
    for (int i = 1; i <= n; i++)
        for (int j = 0; j <= l; j++)
            for (int k = 0; a[i] * k <= timp && k <= j; k++)
                if (d[i][j] < d[i - 1][j - k] + (timp - k * a[i]) / b[i])
                {
                    d[i][j] = d[i - 1][j - k] + (timp - k * a[i]) / b[i];
                    p[i][j] = j - k;
                }
    if (d[n][l] >= l)
        return 1;
    return 0;
}

int main()
{
    fin >> n >> l;
    for (int i = 1; i <= n; i++)
        fin >> b[i] >> a[i];
    int st = 0, dr = 105, tret = 0;
    while (st <= dr)
    {
        int mij = (st + dr) / 2;
        if (verif(mij))
        {
            tret = mij;
            dr = mij - 1;
        }
        else
            st = mij + 1;
    }
    fout << tret << '\n';
    if (verif(tret));
    int x = n, y = l, nr = 0;
    while (x != 0 || y != 0)
    {
        int q = p[x][y];
        v[++nr].x = d[x][y] - d[x - 1][q];
        v[nr].y = y - q;
        x--;
        y = q;
    }
    for (int i = nr; i >= 1; i--)
        fout << v[i].x << ' ' << v[i].y << '\n';
    return 0;
}