Pagini recente » Cod sursa (job #540033) | Cod sursa (job #1879274) | Monitorul de evaluare | Cod sursa (job #192900) | Cod sursa (job #1292093)
#include <fstream>
using namespace std;
ifstream fin("lapte.in");
ofstream fout("lapte.out");
const int Dim = 151, Inf =0x3f3f3f3f;
int n, l, t;
int cost[Dim][Dim], d[Dim][Dim], a[Dim], b[Dim];
void Write(int x, int y, int z);
int main()
{
fin >> n >> l;
for (int i = 1; i <= n; ++i)
fin >> a[i] >> b[i];
for ( t = 1; t <= 100; ++t)
{
for (int i = 0; i <= n; ++i)
for (int j = 0; j <= l; ++j)
d[i][j] = -Inf;
d[0][0] = 0;
for (int i = 1; i <= n; ++i)
for (int j = 0; j <= l; ++j)
for( int k = 0; k * a[i] <= t; k++ )
if ( d[i][j] < d[i-1][j-k] + (t - k * a[i]) / b[i])
{
cost[i][j] = k;
d[i][j] = d[i-1][j-k] + (t-k*a[i]) / b[i];
}
if (d[n][l] >= l)
{
fout << t << "\n";
Write(n, l, t);
break;
}
}
return 0;
}
void Write(int x, int y, int z)
{
if (x != 0)
{
Write(x-1, y-cost[x][y], y);
fout<< cost[x][y] << " " << (t - cost[x][y]*a[x]) / b[x] << "\n";
}
}