Pagini recente » Cod sursa (job #483359) | Cod sursa (job #233757) | Cod sursa (job #1007745) | Cod sursa (job #2470385) | Cod sursa (job #2332880)
#include <fstream>
#include <cstring>
using namespace std;
ifstream f("lapte.in");
ofstream g("lapte.out");
int i,j,x,mid,st,dr,n,L,d[102][102],t[102][102],sol,y,k;
struct meme{
int a,b;
}v[101],b[101];
int dinamica(int X){
int i,j,k;
memset(t,0,sizeof(t));
for(i=1;i<=n;i++)
for(j=0;j<=L;j++)
d[i][j]=-1;
for(j=0;j<=L&&j*v[1].a/v[1].b<=X;j++)
d[1][j]=(X-j*v[1].a)/v[1].b;
for(i=2;i<=n;i++){
for(j=0;j<=L;j++)
for(k=0;k<=j;k++)
if(d[i-1][k]!=-1&&(j-k)*v[i].a<=X)
if(d[i][j]<d[i-1][k]+(X-(j-k)*v[i].a)/v[i].b){
d[i][j]=d[i-1][k]+(X-(j-k)*v[i].a)/v[i].b;
t[i][j]=k;
}
}
return d[n][L];
}
int main()
{ f>>n>>L;
for(i=1;i<=n;i++)
f>>v[i].a>>v[i].b;
st=1;dr=101;
while(st<=dr){
mid=(st+dr)/2;
x=dinamica(mid);
if(x>=L){
dr=mid-1;
sol=mid;
}
else
st=mid+1;
}
g<<sol<<'\n';
dinamica(sol);
y=L;
for(i=n;i>=1;i--){
b[i].a=y-t[i][y];
b[i].b=d[i][y]-d[i-1][t[i][y]];
y=t[i][y];
}
for(i=1;i<=n;i++)
g<<b[i].a<<' '<<b[i].b<<'\n';
return 0;
}