Pagini recente » Profil M@2Te4i | Cod sursa (job #1704471) | Istoria paginii utilizator/hertatabita | Monitorul de evaluare | Cod sursa (job #1778833)
#include<bits/stdc++.h>
#define maxD 20010
#define INF INT_MAX
using namespace std;
int n,l,st,dr,mid;
int a[105],b[105],y,comp,sol;
pair<int,int> dp[20035];
int main()
{
freopen("lapte.in","r",stdin);
freopen("lapte.out","w",stdout);
scanf("%d%d",&n,&l);
for(int i=1;i<=n;i++)
{
scanf("%d%d",&a[i],&b[i]);
}
st=1;
dr=200*l+5;
while(st<=dr)
{
mid=(st+dr)>>1;
dp[0]=make_pair(0,0);
for(int i=1;i<=maxD;i++) dp[i]=make_pair(INF,INF);
for(int i=1;i<=n;i++)
{
y=-1;
for(int j=a[i];j<=mid;j+=a[i])
{
//y=j/a[i];
y++;
for(int k=0;k<=(maxD-y);k++)
{
comp=(mid-j);
if(dp[k].second==(i-1) && dp[k].first!=INF && (dp[k+(j/a[i])].first==INF || (dp[k+(j/a[i])].first<=(dp[k].first+(comp/b[i])) ||
( dp[k+(j/a[i])].first==(dp[k].first+(comp/b[i])) && dp[k+(j/a[i])].second>i))))
{
// if(dp[k+(j/a[i])].first==(dp[k].first+(comp/b[i])) && dp[k+(j/a[i]].second>i)
{
dp[k+(j/a[i])].first=dp[k].first+(comp/b[i]);
dp[k+(j/a[i])].second=i;
}
}
}
}
}
int i=l;
while(i<=maxD && !(dp[i].first!=INF && dp[i].first>=l))
{
i++;
}
if(i==(maxD+1))st=mid+1;
else
{
sol=mid;
dr=mid-1;
}
}
printf("%d\n",sol);
return 0;
}