Pagini recente » Cod sursa (job #2750272) | Cod sursa (job #3187298) | Cod sursa (job #2653270) | Cod sursa (job #337909) | Cod sursa (job #1827230)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("lapte.in");
ofstream g("lapte.out");
const int Nmax = 105;
int n, l, a[Nmax], b[Nmax], DP[Nmax][Nmax], A[Nmax][Nmax], k;
void Read()
{
f>>n>>l;
for(int i = 1; i <= n; i++)
f>>a[i]>>b[i];
}
void Print(int i, int j)
{
if(i == 0) return;
Print(i-1,j-A[i][j]);
g<<A[i][j]<<' '<< (k-A[i][j]*a[i])/b[i]<<'\n';
}
void Init()
{
for(int i = 0; i <= 100; i++)
for(int j = 0; j <= 100; j++)
DP[i][j] = -1000000000;
DP[0][0] = 0;
}
void Solve()
{
for(k = 1; k <= 100; k++)
{
Init();
for(int i = 1; i <= n; i++)
{
for(int j = 0; j <= l; j++)
{
for(int j2 = 0; j2 <= k/a[i] && j2<=j; j2++)
{
if(DP[i][j] < DP[i-1][j-j2]+(k-j2*a[i])/b[i])
{
DP[i][j] = DP[i-1][j-j2]+(k-j2*a[i])/b[i];
A[i][j] = j2;
}
}
}
}
//cout<<DP[n][l];
if(DP[n][l] >= l)
{
g<<k<<'\n';
Print(n,l);
return;
}
}
//g<<k<<'\n';
//Print(n,l);
}
int main()
{
Read();
Solve();
return 0;
}