Pagini recente » Cod sursa (job #3290351) | Cod sursa (job #2671049) | Cod sursa (job #1663502) | Cod sursa (job #2710946) | Cod sursa (job #2064418)
#include <fstream>
#define INF 100000000
using namespace std;
ifstream fin("lapte.in");
ofstream fout("lapte.out");
int n,l,i,j,a[101],b[101],sola[101],solb[101],d[101][101],k;
int st,dr,mid;
int main()
{
fin >> n >> l;
for (i=1; i<=n; i++)
fin >> a[i] >> b[i];
st = 1;
dr = 100000;
while (st <= dr)
{
mid = (st+dr)/2;
for (i=0; i<=n; i++)
for (j=0; j<=l; j++)
d[i][j] = -INF;
d[0][0] = 0;
for (i=1; i<=n; i++)
for (j=0; j<=l; j++)
for (k=0; k<=min(j, mid/a[i]); k++)
d[i][j] = max(d[i][j], d[i-1][j-k]+(mid-a[i]*k)/b[i]);
if (d[n][l] < l)
st = mid+1;
else
dr = mid-1;
}
fout << st << "\n";
for (i=0; i<=n; i++)
for (j=0; j<=l; j++)
d[i][j] = -INF;
d[0][0] = 0;
for (i=1; i<=n; i++)
for (j=0; j<=l; j++)
for (k=0; k<=min(j, st/a[i]); k++)
d[i][j] = max(d[i][j], d[i-1][j-k]+(st-a[i]*k)/b[i]);
j = l;
for (i=n; i>=1; i--)
for (k=0; k<=min(j, st/a[i]); k++)
if (d[i-1][j-k]+(st-a[i]*k)/b[i] == d[i][j])
{
sola[i] = k;
solb[i] = (st-a[i]*k)/b[i];
j -= k;
break;
}
for (i=1; i<=n; i++)
fout << sola[i] << " " << solb[i] << "\n";
return 0;
}