Pagini recente » Cod sursa (job #2141436) | Cod sursa (job #661085) | Cod sursa (job #2853829) | Cod sursa (job #2798459) | Cod sursa (job #2875644)
#include <fstream>
using namespace std;
ifstream fin("lapte.in");
ofstream fout("lapte.out");
struct petrecaret
{
int sec_pt_1LA, sec_pt_1LB;
};
int n, lapte_min, dp[102][105], ans = 101;
petrecaret rasp[102][105], pers[105];
bool dinamica(int timp)
{
for (int i = 0; i <= n; i++)
for (int j = 0; j <= lapte_min; j++)
dp[i][j] = -200000000;
dp[0][0] = 0;
for (int i = 1; i <= n; i++)
{
for (int j = 0; j <= lapte_min; j++)
{
for (int x = 0; x * pers[i].sec_pt_1LA < timp && x <= j; x++)
{
int lapteB = (timp - x * pers[i].sec_pt_1LA) / pers[i].sec_pt_1LB;
if (dp[i][j] < dp[i - 1][j - x] + lapteB)
{
dp[i][j] = dp[i - 1][j - x] + lapteB;
petrecaret it;
it.sec_pt_1LA = x;
it.sec_pt_1LB = lapteB;
rasp[i][j] = it;
}
}
}
}
return dp[n][lapte_min] >= lapte_min;
}
void afis(int i, int j)
{
if (i == 1)
{
fout << rasp[i][j].sec_pt_1LA << " " << rasp[i][j].sec_pt_1LB << "\n";
return;
}
afis(i - 1, j - rasp[i][j].sec_pt_1LA);
fout << rasp[i][j].sec_pt_1LA << " " << rasp[i][j].sec_pt_1LB << "\n";
}
int main()
{
fin >> n >> lapte_min;
for (int i = 1; i <= n; i++)
{
petrecaret pers_i;
fin >> pers_i.sec_pt_1LA >> pers_i.sec_pt_1LB;
pers[i] = pers_i;
}
int st = 1, dr = 100, mid;
while (st <= dr)
{
mid = (st + dr) / 2;
if (dinamica(mid))
{
ans = mid;
dr = mid - 1;
}
else
st = mid + 1;
}
fout << ans << "\n";
dinamica(ans);
afis(n, lapte_min);
return 0;
}