Pagini recente » Cod sursa (job #2088790) | Istoria paginii runda/very.easy/clasament | Cod sursa (job #2224316) | Cod sursa (job #1455451) | Cod sursa (job #1778934)
#include <cstdio>
#include <cstring>
#include <algorithm>
#define MaxN 205
using namespace std;
FILE *IN,*OUT;
int N,L,T,OX;
struct _Din
{
int f,val;
}D[MaxN][MaxN];
struct _Drink
{
int A,B;
}v[MaxN];
bool GetMax(int val)
{
bool found=false;
int X,Y;
memset(D,0,sizeof D);
D[0][0].val=1;
D[0][0].f=-1;
for(int k=1;k<=N;k++)
{
for(int i=L;i>=0;i--)
if(D[k-1][i].val)
{
X=val/v[k].A+1;
while(X)
{
X--;
Y=(val-X*v[k].A)/v[k].B;
if(!D[k][i+X].val)
{
D[k][i+X]=D[k-1][i+X];
if(D[k][i+X].val<D[k-1][i].val+Y)
D[k][i+X].val=D[k-1][i].val+Y,D[k][i+X].f=i;
if(i+X>=L&&D[k][i+X].val>L)
OX=i+X,found=true;
}
}
}
}
return found;
}
int main()
{
IN=fopen("test.in","r");
OUT=fopen("test.out","w");
fscanf(IN,"%d%d",&N,&L);
for(int i=1;i<=N;i++)
fscanf(IN,"%d%d",&v[i].A,&v[i].B);
int hi=100,lw=1,mid;
while(hi>=lw)
{
mid=(hi+lw)>>1;
if(GetMax(mid))
{
T=mid,hi=mid-1;
}
else lw=mid+1;
}
fprintf(OUT,"%d",T);
return 0;
}