Pagini recente » Cod sursa (job #1821050) | Cod sursa (job #1679697) | Cod sursa (job #2775829) | Cod sursa (job #2331590) | Cod sursa (job #3190890)
#include <fstream>
#include <cstring>
#define INF 0x3FFFFFFF
using namespace std;
ifstream fin("lapte.in");
ofstream fout("lapte.out");
int n,l;
struct om
{
int a;
int b;
} v[105];
/// a b
int d[155][155];
pair<int,int> t[105][105];
bool ok(int val)
{
for(int i = 1;i<=n+1;i++)
for(int j=0;j<=l;j++)
d[i][j]=-INF;
d[1][0]=0;
for(int i = 1;i<=n;i++)
for(int a = 0;a<=l;a++)
for(int x =0;x<=val/v[i].a;x++)
{
int br = min((val- x* v[i].a)/v[i].b,l-d[i][a]);
d[i+1][a+x] = max(d[i+1][a+x],d[i][a] + br);
}
return d[n+1][l]>=l;
}
int b_s()
{
int st = 1;
int dr = 100;
int p = -1;
while(st<=dr)
{
int mid = (st+dr)/2;
if(ok(mid))
dr=mid-1,p=mid;
else
st=mid+1;
}
}
void rec(int x,int y)
{
if(x!=0 || y!=0)
{
int tx = t[x][y].first;
int ty = t[x][y].second;
rec(tx,ty);
fout<<x-tx<<' '<<y-ty<<'\n';
}
}
int main()
{
fin>>n>>l;
for(int i=1; i<=n; i++)
fin>>v[i].a>>v[i].b;
int rez = b_s();
fout<<rez<<'\n';
}