Cod sursa(job #1848005)

Utilizator ArambasaVlad Arambasa Arambasa Data 15 ianuarie 2017 12:43:34
Problema Lapte Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.32 kb
#include <fstream>
using namespace std;
ifstream in ("lapte.in");
ofstream out ("lapte.out");
const int NMax=1e2+5;
const int oo = 1e9+5;
int n,l,a[NMax],b[NMax];
int k;
int DP[NMax][NMax], A[NMax][NMax];
void Read()
{
	in>>n>>l;
	for (int i=1;i<=n;i++)
	{
		in>>a[i]>>b[i];
	}
}
void Preset()
{
    for (int i=0;i<=100;i++)
    {
        for (int j=0;j<=100;j++)
        {
            DP[i][j]=-oo;
        }
    }
    DP[0][0]=0;
}
void Print (int argi, int argj)
{
    if (argi)
    {
        Print(argi-1,argj-A[argi][argj]);
        out<<A[argi][argj]<<' '<<(k-A[argi][argj]*a[argi])/b[argi]<<'\n';
    }
}
void Solve ()
{
    for (k=1;k<=100;k++)
    {
        Preset();
        for (int i=1;i<=n;i++)
        {
            for (int j=0;j<=l;j++)
            {
                for (int v=0;v<=k/a[i]&&v<=j;v++)
                {
                    if (DP[i][j]<DP[i-1][j-v]+(k-v*a[i]/b[i]))
                    {
                        DP[i][j]=DP[i-1][j-v]+(k-v*a[i])/b[i];
                        A[i][j]=v;
                    }
                }
            }
            if (DP[n][l]>=l)
            {
                out<<k<<'\n';
                Print(n,l);
                return;
            }
        }
    }
}
int main()
{
    Read();
    Solve();
    return 0;
}