Pagini recente » Cod sursa (job #504956) | Cod sursa (job #291834) | Cod sursa (job #1332252) | Cod sursa (job #2779074) | Cod sursa (job #204145)
Cod sursa(job #204145)
#include <stdio.h>
#include <string.h>
#define NMAX 128
int din[NMAX][NMAX];
int bA[NMAX][NMAX];
int N,L;
int v[NMAX][2];
int compute(int T)
{
int i,j,k,x;
memset(din,0,sizeof(din));
memset(bA,0,sizeof(bA));
for (i=0;i<=L;i++)
{
din[1][i]=(T-i*v[1][0])/v[1][1];
bA[1][i]=i;
}
for (i=2;i<=N;i++)
for (j=0;j<=L;j++)
for (k=0,din[i][j]=-1;k<=j;k++)
{
if (k*v[i][0]>T) break;
x=(T-k*v[i][0])/v[i][1];
if (x+din[i-1][j-k]>din[i][j])
{
din[i][j]=x+din[i-1][j-k];
bA[i][j]=k;
}
}
if (din[N][L]>=L) return 1;
return 0;
}
int main()
{
freopen("lapte.in","r",stdin);
freopen("lapte.out","w",stdout);
int i,j;
int sol[NMAX][2];
scanf("%d %d",&N,&L);
for (i=1;i<=N;i++)
scanf("%d %d",&v[i][0],&v[i][1]);
int T,stp;
for (T=(1<<7)-1,stp=7;stp>=0;stp--)
if ( compute(T- (1 << stp) ) ) T-=(1<<stp);
printf("%d\n",T);
compute(T);
for (i=N,j=L;i;i--)
{
sol[i][0]=bA[i][j];
sol[i][1]=(T-bA[i][j]*v[i][0])/v[i][1];
j-=bA[i][j];
}
for (i=1;i<=N;i++)
printf("%d %d\n",sol[i][0],sol[i][1]);
return 0;
}