Pagini recente » Cod sursa (job #920559) | Cod sursa (job #2878251) | Cod sursa (job #330207) | Cod sursa (job #2778962) | Cod sursa (job #2157463)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("lapte.in");
ofstream fout("lapte.out");
int n,l,i,j,x,y,nr,st,dr,mid,v[105][105],f[105][105],r[105];
struct lapte
{ int a,b; } p[110];
bool timp(int t)
{
int i,j,h,x,y,id=0,mx=0;
for(i=1;i<=n;i++)
for(j=1;j<=l;j++)
v[i][j]=-1;
v[1][0]=t/p[1].b;
for(i=1;i<=l;i++)
{
x=t-i*p[1].a;
if(x>=0) v[1][i]=x/p[1].b;
}
for(i=2;i<=n;i++)
{
v[i][0]=v[i-1][0]+(t/p[i].b);
for(j=1;j<=l;j++)
{
mx=-1; id=-1;
for(h=0;h<=j;h++)
{
y=t-(j-h)*p[i].a;
if(v[i-1][h]>=0&&y>=0)
{
x=v[i-1][h]+y/p[i].b;
if(x>mx)
{ mx=x; id=h; }
}
}
v[i][j]=mx;
f[i][j]=id;
}
}
if(v[n][l]>=l) return 1;
return 0;
}
int main () {
fin>>n>>l;
for(i=1;i<=n;i++)
fin>>p[i].a>>p[i].b;
st=1; dr=200000;
while(st<=dr)
{
mid=st+(dr-st)/2;
if(timp(mid)==1) dr=mid-1;
else st=mid+1;
}
if(timp(mid)==0) mid++;
if(timp(mid-1)==1) mid--;
timp(mid);
x=n; y=l;
while(x>=1)
{ r[x]=y; y=f[x][y]; x--; }
fout<<mid<<"\n";
for(i=1;i<=n;i++)
{
x=r[i]-r[i-1];
fout<<x<<" "<<(mid-x)/p[i].b<<"\n";
}
}