Pagini recente » Cod sursa (job #1114289) | Cod sursa (job #745536) | Cod sursa (job #3005451) | Cod sursa (job #544548) | Cod sursa (job #3255254)
#include <bits/stdc++.h>
const std :: string FILENAME = "lapte";
std :: ifstream f (FILENAME + ".in");
std :: ofstream g (FILENAME + ".out");
const int NMAX = 1e2 + 5;
int n;
int l;
int dp[NMAX][NMAX];
std :: pair <int, int> v[NMAX];
inline bool valid(int val)
{
for(int i = 0; i <= n; i ++)
{
for(int j = 0; j <= l; j ++)
{
dp[i][j] = -1;
}
}
dp[0][0] = 0;
for(int i = 1; i <= n; i ++)
{
for(int j = 0; j <= l; j ++)
{
for(int litri = 0; litri * v[i].first <= val && litri <= j; litri ++)
{
int rem = val - litri * v[i].first;
rem /= v[i].second;
if(dp[i - 1][j - litri] != -1)
{
dp[i][j] = std :: max(dp[i - 1][j - litri] + rem, dp[i][j]);
}
}
if(j == l && dp[i][j] >= l)
{
return true;
}
}
}
return false;
}
int main()
{
f >> n >> l;
for(int i = 1; i <= n; i ++)
{
f >> v[i].first >> v[i].second;
}
int st = 1;
int dr = 100;
int res = 0;
while(st <= dr)
{
int mij = (st + dr) / 2;
if(valid(mij))
{
dr = mij - 1;
res = mij;
}
else
{
st = mij + 1;
}
}
g << res << '\n';
//nu bag path recovery(i aint writin allat)
return 0;
}