Cod sursa(job #2314403)

Utilizator triscacezarTrisca Vicol Cezar triscacezar Data 8 ianuarie 2019 14:17:55
Problema Lapte Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.96 kb
#include <bits/stdc++.h>

using namespace std;

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

int n,l,t,i,j,p,lo,hi,a[110],b[110],ans[110],qu[110][110];

bool ok(int mi)
{
    int dyn[110];
    memset(dyn,-128,sizeof(dyn));
    dyn[0]=0;
    for(i=1;i<=n;i++)
        for(p=l;p>=0;p--)
            for(j=0;j*a[i]<=mi&&j<=p;j++)
            {
                int aux=dyn[p-j]+(mi-a[i]*j)/b[i];
                dyn[p]=max(dyn[p],aux);
                if(dyn[p]==aux)
                    qu[i][p]=j;
            }
    return (dyn[l]>=l);
}

int main()
{
    f>>n>>l;
    for(i=1;i<=n;i++)
        f>>a[i]>>b[i];
    lo=1,hi=100;
    while(lo<hi)
    {
        int mi=(lo+hi)/2;
        if(ok(mi))
            hi=mi;
        else
            lo=mi+1;
    }ok(lo);
    g<<lo<<'\n';
    for(j=l,i=n;i>=1;j-=qu[i][j],i--)
        ans[i]=qu[i][j];
    for(i=1;i<=n;i++)
        g<<ans[i]<<' '<<(lo-ans[i]*a[i])/b[i]<<'\n';
    return 0;
}