Cod sursa(job #811720)

Utilizator tzipleatudTudor Tiplea tzipleatud Data 12 noiembrie 2012 21:03:59
Problema Lapte Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.93 kb
#include <fstream>
#include <cstring>
#define NM 110

using namespace std;

ifstream f("lapte.in");
ofstream g("lapte.out");

int N,L,M;
int ANS;
int i,j,k;
int A[NM],B[NM];
int DP[NM][NM];

bool Check (int T)
{
    memset(DP,0,sizeof(DP));
    int MX=0;

    for (i=1; i<=N; i++)
    {
        for (k=0; k<=L; k++)
            for (j=0; j<=k; j++)
                DP[i][k]=max(DP[i][k],DP[i-1][j]+(T-(k-j)*A[i])/B[i]);
    }

    if (DP[N][L]>=L)
        return 1;

    return 0;
}

void Solve ()
{
    int P=1,U=NM,M;
    ANS=NM;

    while (P<=U)
    {
        M=(P+U)/2;
        if (Check(M))
        {
            ANS=M;
            U=M-1;
        }
        else
            P=M+1;
    }

    return;
}

int main ()
{
    f >> N >> L;
    for (i=1; i<=N; i++)
        f >> A[i] >> B[i];

    Solve();

    g << ANS << '\n';

    f.close();
    g.close();

    return 0;
}