Pagini recente » Cod sursa (job #2770249) | Cod sursa (job #1288806) | Cod sursa (job #668972) | Cod sursa (job #1732653) | Cod sursa (job #2332847)
#include <fstream>
#include <cstring>
using namespace std;
ifstream fin("lapte.in");
ofstream fout("lapte.out");
int n,L,i,j,l,st,dr,mij,sol,r,d[105][105],tata[105][105];
struct numar{
int a,b;
}v[105],s[105];
void dinamica(int T){
memset(d,0,sizeof(d));
memset(tata,0,sizeof(tata));
int i,j,k;
for(i=0;i<=T;i++)
if(T-i*v[1].a>=0)
d[1][i]=(T-i*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][j]<d[i-1][k]+(T-(j-k)*v[i].a)/v[i].b && (j-k)*v[i].a<=T){
d[i][j]=d[i-1][k]+(T-(j-k)*v[i].a)/v[i].b;
tata[i][j]=k;
}
}
}
}
}
int main()
{
fin>>n>>L;
for(i=1;i<=n;i++)
fin>>v[i].a>>v[i].b;
st=1; dr=1000;
while(st<=dr){
mij=(st+dr)/2;
dinamica(mij);
if(d[n][L]>=L){
sol=mij;
dr=mij-1;
}
else
st=mij+1;
}
fout<<sol<<'\n';
dinamica(sol);
l=L;
for(i=n;i>0;i--){
s[i].a=l-tata[i][l];
s[i].b=d[i][l]-d[i-1][tata[i][l]];
l=tata[i][l];
}
for(i=1;i<=n;i++)
fout<<s[i].a<<' '<<s[i].b<<'\n';
return 0;
}