Pagini recente » Cod sursa (job #263321) | Cod sursa (job #454472) | Cod sursa (job #2753629) | Cod sursa (job #2673650) | Cod sursa (job #1133694)
#include <fstream>
#include <string.h>
using namespace std;
ifstream f("lapte.in");
ofstream g("lapte.out");
int v[101][101],c[101][101],csol[101][101],i,j,n,l,st,dr,t,a[101],b[101],k,sol,x[102],y[102];
int dinamica(int t){
for(i=1;i<=n;i++)
for(j=0;j<=l;j++)
v[i][j]=-1;
memset(c,0,sizeof(c));
for(i=0;i<=l&&i<=t/a[1];i++)
{
v[1][i]=(t-i*a[1])/b[1];
c[1][i]=0;
}
for(i=2;i<=n;i++){
for(j=0;j<=l;j++)
for(k=0;k<=j;k++)
if(v[i-1][k]!=-1&&(j-k)>=0&&(j-k)*a[i]<=t&&v[i][j]<v[i-1][k]+(t-(j-k)*a[i])/b[i]){
v[i][j]=v[i-1][k]+(t-(j-k)*a[i])/b[i];
c[i][j]=k;
}
}
return v[n][l]>=l;
}
int main()
{
f>>n>>l;
for(i=1;i<=n;i++)
f>>a[i]>>b[i];
st=1;sol=0;
dr=10000;
while(st<=dr){
t=(st+dr)/2;
if(dinamica(t)>0){
sol=t;
memcpy(csol,c,sizeof(c));
dr=t-1;
}
else
st=t+1;
}
g<<sol<<'\n';
for(i=n;i>=1;i--){
x[i]=l-csol[i][l];
y[i]=(sol-x[i]*a[i])/b[i];
l=csol[i][l];
}
for(i=1;i<=n;i++)
g<<x[i]<<' '<<y[i]<<'\n';
return 0;
}