Cod sursa(job #3255254)

Utilizator Sasha_12454Eric Paturan Sasha_12454 Data 9 noiembrie 2024 20:28:57
Problema Lapte Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.54 kb
#include <bits/stdc++.h>

const std :: string FILENAME = "lapte";

std :: ifstream f (FILENAME + ".in");

std :: ofstream g (FILENAME + ".out");

const int NMAX = 1e2 + 5;

int n;

int l;

int dp[NMAX][NMAX];

std :: pair <int, int> v[NMAX];

inline bool valid(int val)
{
    for(int i = 0; i <= n; i ++)
    {
        for(int j = 0; j <= l; j ++)
        {
            dp[i][j] = -1;
        }
    }

    dp[0][0] = 0;

    for(int i = 1; i <= n; i ++)
    {
        for(int j = 0; j <= l; j ++)
        {
            for(int litri = 0; litri * v[i].first <= val && litri <= j; litri ++)
            {
                int rem = val - litri * v[i].first;

                rem /= v[i].second;

                if(dp[i - 1][j - litri] != -1)
                {
                    dp[i][j] = std :: max(dp[i - 1][j - litri] + rem, dp[i][j]);
                }
            }

            if(j == l && dp[i][j] >= l)
            {
                return true;
            }
        }
    }

    return false;
}

int main()
{

    f >> n >> l;

    for(int i = 1; i <= n; i ++)
    {
        f >> v[i].first >> v[i].second;
    }

    int st = 1;

    int dr = 100;

    int res = 0;

    while(st <= dr)
    {
        int mij = (st + dr) / 2;

        if(valid(mij))
        {
            dr = mij - 1;

            res = mij;
        }
        else
        {
            st = mij + 1;
        }
    }

    g << res << '\n';

    //nu bag path recovery(i aint writin allat)

    return 0;
}