Pagini recente » Cod sursa (job #2942114) | Cod sursa (job #1609769) | Cod sursa (job #2425536) | Clasament redsnow_3 | Cod sursa (job #2008102)
#include <iostream>
#include <fstream>
#define LMAX 105
using namespace std;
ifstream si("lapte.in");
ofstream so("lapte.out");
int a[LMAX],b[LMAX];
int s[LMAX][LMAX],n;
int r[LMAX][LMAX],l;
bool verif(int x)
{
for(int i=0;i<=n;++i)
for(int j=0;j<=l;++j)
{
s[i][j]=-(LMAX*LMAX);
r[i][j]=0;
}
s[0][0]=0;
for(int i=1;i<=n;++i)
for(int j=0;j<=l&&j*a[i]<=x;++j)
for(int k=0;k+j<=l;++k)
{
int y=s[i-1][k]+(x-j*a[i])/b[i];
if(s[i][k+j]<y)
{
s[i][k+j]=y;
r[i][k+j]=j;
}
}
if(l<=s[n][l])
return true;
return false;
}
int main()
{
si>>n>>l;
for(int i=n;i;--i)
si>>a[i]>>b[i];
int st=1,dr=20005,mij;
while(st<=dr)
{
mij=(st+dr)/2;
if(verif(mij))
{
dr=mij-1;
}
else
st=mij+1;
}
so<<st<<'\n';
verif(st);
int k=l;
for(int i=n;i;--i)
{
so<<r[i][k]<<' '<<(st-r[i][k]*a[i])/b[i]<<'\n';
k-=r[i][k];
}
return 0;
}