Pagini recente » Cod sursa (job #2193757) | Cod sursa (job #2413091) | Cod sursa (job #956145) | Cod sursa (job #1097494) | Cod sursa (job #1848005)
#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;
}