Pagini recente » Cod sursa (job #2100259) | Cod sursa (job #1710674) | Cod sursa (job #607435) | Cod sursa (job #86764) | Cod sursa (job #2203440)
#include <cstdio>
#include <algorithm>
using namespace std;
struct Petrecareti
{
int ta,tb;
} v[105];
int sepoate[105][105];
int bmax[105][105];
int n,l;
struct Solutie
{
int a,b;
} sol[105];
bool verif(int t)
{
int i,j,k;
for(i=0; i<=n; i++)
for(j=0; j<=l; j++)
sepoate[i][j]=-1e9;
for(i=1; i<=n; i++)
for(j=0; j<=l; j++)
bmax[i][j]=(t-j*v[i].ta)/v[i].tb;
sepoate[0][0]=0;
for(i=1; i<=n; i++)
for(j=0; j<=l; j++)
for(k=0; k<=j && t-k*v[i].ta>=0; k++)
sepoate[i][j]=max(sepoate[i][j], sepoate[i-1][j-k]+bmax[i][k]);
return sepoate[n][l]>=l;
}
int bs(int st, int dr)
{
int last,med;
while(st<=dr){
med=(st+dr)/2;
if(verif(med)==1){
last=med;
dr=med-1;
}
else
st=med+1;
}
return last;
}
int main()
{ freopen("lapte.in", "r",stdin);
freopen("lapte.out", "w",stdout);
int i,t,a,j;
scanf("%d%d", &n, &l);
for(i=1; i<=n; i++)
scanf("%d%d", &v[i].ta, &v[i].tb);
t=bs(1, 100);
printf("%d\n", t);
verif(t);
a=l;
for(i=n; i>0; i--){
for(j=0; j<=a && t-j*v[i].ta>=0; j++){
if(sepoate[i-1][a-j]+bmax[i][j]==sepoate[i][a]){
sol[i].a=j;
sol[i].b=bmax[i][j];
a=a-j;
break;
}
}
}
for(i=1; i<=n; i++)
printf("%d %d\n", sol[i].a, sol[i].b);
return 0;
}