Cod sursa(job #2170490)

Utilizator dianamariaDiana Cataros dianamaria Data 15 martie 2018 02:12:38
Problema Lapte Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.18 kb
#include <fstream>
#include <vector>
using namespace std;
ifstream in ("lapte.in");
ofstream out ("lapte.out");
const int N=102;
const int INF=1000000000;
int n,l,a[N],b[N],d[N][N],v[N][N];
vector < pair<int,int> > ans;
bool verif(int x)
{
    int i,j,t;
    for (i=0;i<N-1;i++)
        for (j=0;j<N-1;j++)
            d[i][j]=-INF;
    d[0][0]=0;
    for (i=1;i<=n;i++)
        for (j=0;j<=l;j++)
            for (t=0;t<=x/a[i] && t<=j;t++)
                if (d[i][j]<d[i-1][j-t]+(x-t*a[i])/b[i])
                {
                    d[i][j]=d[i-1][j-t]+(x-t*a[i])/b[i];
                    v[i][j]=t;
                }
    if (d[n][l]>=l)
        return 1;
    return 0;
}
int main()
{
    int i,j,st=1,dr=N-2,x;
    in>>n>>l;
    for (i=1;i<=n;i++)
        in>>a[i]>>b[i];
    while (st!=dr)
    {
        int mij=(st+dr)/2;
        if (verif(mij))
            dr=mij;
        else
            st=mij+1;
    }
    verif(st);
    x=st;
    for (i=n,j=l; i>=1; j-=v[i][j],i--)
        ans.push_back(make_pair(v[i][j],(x-v[i][j]*a[i])/b[i]));
    out<<x<<"\n";
    for (i=n-1;i>=0;i--)
        out<<ans[i].first<<" "<<ans[i].second<<'\n';
    return 0;
}