Pagini recente » Cod sursa (job #2817889) | Cod sursa (job #2565490) | Cod sursa (job #1140602) | Cod sursa (job #69481) | Cod sursa (job #2868720)
#include <fstream>
using namespace std;
ifstream fin("lapte.in");
ofstream fout("lapte.out");
int n,i,j,mij,st,dr,l,va[105],vb[105],sol,dp[105][105],xi,a[105][105];
struct answear
{
int x,y;
}ans[105];
int valid(int t)
{
int i,xi,yi,j;
for (i=0; i<=100; i++)
{
for (j=0; j<=100; j++)
{
dp[i][j]=-100;
}
}
dp[0][0]=0;
for(i=1; i<=n; i++)
{
for(j=0; j<=l; j++)
{
for(xi=0; xi*va[i]<=t && xi<=j; xi++)
{
dp[i][j]=max(dp[i][j],dp[i-1][j-xi]+(t-va[i]*xi)/vb[i]);
}
}
}
if (dp[n][l]>=l) return 1;
else return 0;
}
int main()
{
fin >>n>>l;
for (i=1; i<=n; i++)
{
fin >>va[i]>>vb[i];
}
st=1;
dr=100;
while (st<=dr)
{
mij=(st+dr)/2;
if (valid(mij)==1)
{
sol=mij;
dr=mij-1;
}
else st=mij+1;
}
fout <<sol<<'\n';
for (i=0;i<=n;i++)
{
for (j=0;j<=l;j++)
{
dp[i][j]=-100;
}
}
dp[0][0]=0;
for(i=1;i<=n;i++)
{
for(j=0;j<=l;j++)
{
for(xi=0; xi*va[i]<=sol && xi<=j; xi++)
{
if(dp[i][j]<dp[i-1][j-xi]+(sol-va[i]*xi)/vb[i])
{
a[i][j]=j-xi;
dp[i][j]=max(dp[i][j],dp[i-1][j-xi]+(sol-va[i]*xi)/vb[i]);
}
}
}
}
for(i=n;i>=1;i--)
{
ans[i].x=l-a[i][l];
ans[i].y=(sol-ans[i].x*va[i])/vb[i];
l=a[i][l];
}
for (i=1;i<=n;i++)
{
fout <<ans[i].x<<" "<<ans[i].y<<'\n';
}
return 0;
}