Pagini recente » Cod sursa (job #1808381) | Cod sursa (job #2367331) | Cod sursa (job #1344669) | Cod sursa (job #1749869) | Cod sursa (job #1267259)
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
ifstream fin("lapte.in");
ofstream fout("lapte.out");
#define MAX 102
int c[MAX][MAX], n, l, a[MAX], b[MAX], p[MAX][MAX];
void af(int a[MAX][MAX])
{
for(int i=1;i<=n;i++)
{
for(int j=1;j<=l;j++)
{
cout << a[i][j] << " ";
}
cout << "\n";
}
cout << "\n";
}
bool rez(int t)
{
int i, j, k;
memset(c, -1, sizeof(c));
for(i=0;i<=n;i++)
{
c[i][0]=0;
}
for(i=0;i<n;i++)
{
for(j=0;j<=l;j++)
{
for(k=0;k<=t;k++)
{
if(c[i][j]!=-1)
if(c[i+1][j+k]<c[i][j]+(t-a[i+1]*k)/b[i+1])
{
c[i+1][j+k]=c[i][j]+(t-a[i+1]*k)/b[i+1];
p[i+1][j+k] = j;
}
}
}
}
if(c[n][l]>=l)
return 1;
return 0;
}
int main()
{
int i, st, dr, k;
fin>>n>>l;
for(i=1;i<=n;i++)
{
fin>>a[i]>>b[i];
}
st=1;
dr=100;
while(st<dr)
{
int t=(st+dr)>>1;
k=rez(t);
if(k)
dr=t;
else
st=t+1;
}
fout << st << "\n";
int r=l;
for(i=n;i>=1;i--)
{
fout << (st-(r-p[i][r])*a[i])/b[i] << " " << r-p[i][r] << "\n";
r=p[i][r];
}
}