Cod sursa(job #2008102)

Utilizator refugiatBoni Daniel Stefan refugiat Data 5 august 2017 12:43:09
Problema Lapte Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.19 kb
#include <iostream>
#include <fstream>
#define LMAX 105
using namespace std;
ifstream si("lapte.in");
ofstream so("lapte.out");
int a[LMAX],b[LMAX];
int s[LMAX][LMAX],n;
int r[LMAX][LMAX],l;
bool verif(int x)
{
    for(int i=0;i<=n;++i)
        for(int j=0;j<=l;++j)
        {
            s[i][j]=-(LMAX*LMAX);
            r[i][j]=0;
        }
    s[0][0]=0;
    for(int i=1;i<=n;++i)
        for(int j=0;j<=l&&j*a[i]<=x;++j)
            for(int k=0;k+j<=l;++k)
            {
                int y=s[i-1][k]+(x-j*a[i])/b[i];
                if(s[i][k+j]<y)
                {
                    s[i][k+j]=y;
                    r[i][k+j]=j;
                }
            }
    if(l<=s[n][l])
        return true;
    return false;
}
int main()
{
    si>>n>>l;
    for(int i=n;i;--i)
        si>>a[i]>>b[i];
    int st=1,dr=20005,mij;
    while(st<=dr)
    {
        mij=(st+dr)/2;
        if(verif(mij))
        {
            dr=mij-1;
        }
        else
            st=mij+1;
    }
    so<<st<<'\n';
    verif(st);
    int k=l;
    for(int i=n;i;--i)
    {
        so<<r[i][k]<<' '<<(st-r[i][k]*a[i])/b[i]<<'\n';
        k-=r[i][k];
    }
    return 0;
}