Pagini recente » Cod sursa (job #3153387) | Cod sursa (job #3133491) | Cod sursa (job #372569) | Cod sursa (job #2941546) | Cod sursa (job #1784533)
#include<cstdio>
struct eu{int x,y;};
eu v[101],v1[101];
struct eu2{int x,dudv,val1,val2;};
eu2 a[101][101];
int i,j,n,m,l,l1,l2,mid,o,k;
int main ()
{
freopen("lapte.in","r",stdin);
freopen("lapte.out","w",stdout);
scanf("%d%d",&n,&l);
for(i=1;i<=n;i++)
scanf("%d%d",&v[i].x,&v[i].y);
l1=1;
l2=1000000;
while(l1<=l2)
{
mid=(l1+l2)/2;
for(i=0;i<=n;i++)
for(j=0;j<=l;j++)
a[i][j].x=-10000000;
a[0][0].x=0;
for(i=1;i<=n;i++)
for(j=0;j<=l;j++)
for(k=0;k*v[i].y<=mid&&j+k<=l;k++)
{
if(a[i][j+k].x<a[i-1][j].x+(mid-k*v[i].y)/v[i].x)
{
a[i][j+k].x=a[i-1][j].x+(mid-k*v[i].y)/v[i].x;
a[i][j+k].dudv=j;
a[i][j+k].val1=(mid-k*v[i].y)/v[i].x;
a[i][j+k].val2=k;
}
}
if(a[n][l].x>=l)
{
o=mid;
int poz=l;
for(i=n;i>=1;i--)
{
v1[i].x=a[i][poz].val1;
v1[i].y=a[i][poz].val2;
poz=a[i][poz].dudv;
}
l2=mid-1;
}
else
l1=mid+1;
}
printf("%d\n",o);
for(i=1;i<=n;i++)
printf("%d %d\n",v1[i].x,v1[i].y);
return 0;
}