Cod sursa(job #1140541)

Utilizator raztaapDumitru raztaap Data 12 martie 2014 08:26:56
Problema Lapte Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.75 kb
#include <fstream>
using namespace std;
ifstream f("lapte.in");
ofstream g("lapte.out");
int n, l, i, j, k, p, q, a[110], b[110], d[110], c[110][110], v[110][110], P[110][110], maxim, s, t, nr, x;
int main(){
    f>>n>>l;
    for(i=1; i<=n; i++)
        f>>a[i]>>b[i];
    q=101;
    while(p+1<q)
    {
        t=(p+q)/2;
        for(i=0; i<101; i++)
            for(j=0; j<101; j++)
            {
                c[i][j]=0;
                v[i][j]=0;
                P[i][j]=0;
            }
        for(j=0; j<=t/a[1]; j++)
        {
            c[1][j]=(t-a[1]*j)/b[1];
            v[1][j]=j;
            P[1][j]=1;
 
        }
        for(i=2; i<=n; i++)
        {
            for(j=0; j<=l; j++)
            {
                maxim=-1;
                nr=0;
                for(k=0; k<=j; k++)
 
                    if(a[i]*k<=t)
                    {
                        x=(t-a[i]*k)/b[i];
                        if(c[i-1][j-k]+x>maxim && P[i-1][j-k]==1)
                        {
                            maxim=c[i-1][j-k]+x;
                            nr=k;
                        }
                    }
                    else break;
                c[i][j]=maxim;
                v[i][j]=nr;
                if(maxim==-1) P[i][j]=0;
                else P[i][j]=1;
            }
        }
        if(c[n][l]>=l)
        {
            s=t;
            k=l;
            for(i=n; i>0; i--)
            {
                d[i]=v[i][k];
                k-=v[i][k];
            }
            q=t;
        }
        else p=t;
    }
    g<<s<<"\n";
    for(i=1; i<=n; i++)
    {
        g<<d[i]<<' ';
        k=(s-d[i]*a[i])/b[i];
        g<<k<<"\n";
    }
    return 0;
    f.close();
    g.close();
}