Pagini recente » Cod sursa (job #3205821) | Cod sursa (job #2742969) | Cod sursa (job #1828597) | Cod sursa (job #2560247) | Cod sursa (job #1754202)
#include <iostream>
#include<fstream>
#include<vector>
using namespace std;
vector< pair<int,int> > ans;
int best[105][105],i,j,n,a[105],b[105],x,p,u,m,l,q,k,tt[105][105],lin,col,pos[105][105];
bool check()
{
x=m;
for(i=0;i<=n;i++)
for(j=0;j<=l;j++)
best[i][j]=0,pos[i][j]=0;
pos[0][0]=1;
for(i=1;i<=n;i++)
for(j=0;j<=x/a[i];j++)
{
q=(x-(j*a[i]))/b[i];
for(k=0;k<=l-j;k++)
{
if(pos[i-1][k])
{
pos[i][k+j]=1;
if(best[i-1][k]+q>best[i][k+j])
{best[i][k+j]=best[i-1][k]+q;tt[i][k+j]=k;}
}
}
}
return (best[n][l]>=l);
}
int main()
{
ifstream f("lapte.in");
ofstream g("lapte.out");
f>>n>>l;
for(i=1;i<=n;i++)
{
f>>a[i]>>b[i];
}
p=1;u=100;
while(u-p>1)
{
m=(p+u)/2;
if(check()) u=m;
else p=m;
}
m=u;
check();
g<<u<<'\n';lin=n;col=l;
while(lin!=0)
{
ans.push_back(make_pair(col-tt[lin][col],best[lin][col]-best[lin-1][tt[lin][col]]));
col=tt[lin][col];lin--;
}
for(i=ans.size()-1;i>=0;i--)
{
g<<ans[i].first<<' '<<ans[i].second<<'\n';
}
return 0;
}