Pagini recente » Cod sursa (job #1910208) | Cod sursa (job #3253051) | Cod sursa (job #1678153) | Cod sursa (job #2141358) | Cod sursa (job #1892102)
#include <cstdio>
#define INF 2000000000
#define MAXN 101
int d[MAXN][MAXN],p[MAXN][MAXN],a[MAXN],b[MAXN],sol[MAXN],n,q;
inline int verif(int t)
{
int x;
for(int i=1;i<=q;i++)
d[0][i]=-INF;
for(int i=1;i<=n;i++)
for(int j=0;j<=q;j++)
{
d[i][j]=d[i-1][j]+t/b[i];p[i][j]=0;
for(int k=1;k<=j && k*a[i]<=t;k++)
{
x=d[i-1][j-k]+(t-k*a[i])/b[i];
if(d[i][j]<x)
d[i][j]=x,p[i][j]=k;
}
}
return d[n][q];
}
int cbin()
{
int i=0,pas;
for(pas=1<<14;pas;pas>>=1)
if(verif(i+pas)<q)
i+=pas;
return i+1;
}
int main()
{
FILE *fin,*fout;
fin=fopen("lapte.in","r");
fout=fopen("lapte.out","w");
fscanf(fin,"%d%d",&n,&q);
for(int i=1;i<=n;i++)
fscanf(fin,"%d%d",&a[i],&b[i]);
int x,t=cbin();
fprintf(fout,"%d\n",t);
x=verif(t);
for(int i=n;i;i--)
{
sol[i]=p[i][q];
q-=sol[i];
}
for(int i=1;i<=n;i++)
fprintf(fout,"%d %d\n",sol[i],(t-sol[i]*a[i])/b[i]);
fclose(fin);
fclose(fout);
return 0;
}