Pagini recente » Cod sursa (job #1306853) | Cod sursa (job #787944) | Cod sursa (job #2145804) | Cod sursa (job #3216124) | Cod sursa (job #1263779)
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
int n,i,j,l,st,dr,m,mx,my,sol;
int p,q,ok,L,k,la,lb;
int a[205][205];
bool A[205][205];
struct nod
{
int x;
int y;
}v[205],b[205][205][205];
nod vsol[205];
int La,Lb;
int main()
{
freopen("lapte.in","r",stdin);
freopen("lapte.out","w",stdout);
scanf("%d %d",&n,&l);
mx=1000; my=1000; sol=1000000000;
for (i=1;i<=n;i++)
{
scanf("%d %d",&v[i].x,&v[i].y);
mx=min(mx,v[i].x);
my=min(my,v[i].y);
}
dr=(mx+my)*l;
st=1;
while (st<=dr)
{
memset(a,0,sizeof(a));
memset(A,0,sizeof(A));
ok=0; L=0;
m=(st+dr)/2; A[0][0]=1;
for (i=1;i<=n;i++)
for (k=0;k<=l;k++) if (A[i-1][k])
for (j=0;j<=m/v[i].x;j++)
if ((a[i][k+j]<a[i-1][k]+((m-(v[i].x*j))/v[i].y)))
{
a[i][k+j]=a[i-1][k]+((m-(v[i].x*j))/v[i].y);
A[i][k+j]=1;
b[i][k+j][a[i][k+j]].x=j;
b[i][k+j][a[i][k+j]].y=((m-(v[i].x*j))/v[i].y);
if ((k+j>=l)&&(a[i][k+j]>=l))
{
ok=1;
L=k+j;
}
}
if ((ok==1)&&(m<sol))
{
sol = m;
La = L; Lb = a[n][L];
}
if (ok) dr=m-1;
else st=m+1;
}
printf("%d\n",sol);
for (i=n;i>=1;i--)
{
la=La; lb=Lb;
vsol[i].x=b[i][la][lb].x;
vsol[i].y=b[i][la][lb].y;
Lb=Lb-b[i][la][lb].y;
La=La-b[i][la][lb].x;
}
for (i=1;i<=n;i++)
printf("%d %d\n",vsol[i].x,vsol[i].y);
return 0;
}