Pagini recente » Cod sursa (job #2776752) | Cod sursa (job #2618945) | Cod sursa (job #2750966) | Cod sursa (job #1504009) | Cod sursa (job #837386)
Cod sursa(job #837386)
#include <iostream>
#include <fstream>
using namespace std;
int n,l,a[110],b[110],c[110][110],poz[110][110],minim,t;
ifstream fin("lapte.in");
ofstream fout("lapte.out");
void afisare (int x,int y)
{
if(x==0) ;
else{
afisare(x-1,poz[x][y]);
fout<<y-poz[x][y]<<" "<<c[x][y]-c[x-1][poz[x][y]]<<"\n";
}
}
int bun(int x)
{
for(int i=0;i<=n;i++)
for(int j=0;j<=l;j++)
c[i][j]=-1;
c[0][0]=0;
for(int i=1;i<=n;i++)
for(int j=0;j<=l;j++)
{
c[i][j]=-1;
for(int k=0;k<=j;k++)
if(c[i-1][k] != -1)
{
int aux=(j-k)*a[i];
if(aux<=x && c[i][j]<c[i-1][k]+(x-aux)/b[i])
{
c[i][j]=c[i-1][k]+(x-aux)/b[i];
poz[i][j]=k;
}
}
}
if(c[n][l]>=l) return 1;
return 0;
}
int cauta(int st,int dr)
{
int r=dr+1;
while(st<dr)
{
int m=(st+dr)/2;
if(bun(m))
{
r=m;
dr=m-1;
}
else st=m+1;
}
return r;
}
int main()
{
fin>>n>>l;
for(int i=1;i<=n;i++)
fin>>a[i]>>b[i];
t=cauta(1,100);
bun(t);
fout<<t<<'\n';
afisare(n,l);
return 0;
}