Pagini recente » Cod sursa (job #934564) | Cod sursa (job #1936334) | Cod sursa (job #2053635) | Cod sursa (job #1788288) | Cod sursa (job #658985)
Cod sursa(job #658985)
#include <iostream>
#include <fstream>
#include <utility>
#include <vector>
#include <stack>
using namespace std;
int main ()
{
ifstream in("lapte.in");
int N, L, temp1, temp2;
in >> N >> L;
vector < pair <int,int> > pers;
pair <int,int> temp;
for(int i = 0; i < N; ++i)
{
in >> temp1 >> temp2;
temp.first = temp1;
temp.second = temp2;
pers.push_back(temp);
}
in.close();
int SL[101][101], LS[101][101];
int T;
for (T = 1; T <= 100; ++T)
{
for (int i = 0; i <= N; ++i)
for (int j = 0; j <= L; ++j)
SL[i][j] = -100000;
SL[0][0] = 0;
for (int i = 1; i <= N; ++i)
for (int AB = 0; AB <= L; ++AB)
for (int A = 0; A*pers[i-1].first <= T; ++A)
if (SL[i][AB] < (SL[i-1][AB-A] + (T - A*pers[i-1].first)/pers[i-1].second))
{
SL[i][AB] = SL[i-1][AB-A] + (T - A*pers[i-1].first)/pers[i-1].second;
LS[i][AB] = A;
}
if(SL[N][L] >= L)
break;
}
ofstream out("lapte.out");
out << T << "\n";
stack <int> sol;
for (int n = N; n >= 1; --n)
{
sol.push((T - LS[n][L]*pers[n-1].first)/pers[n-1].second);
sol.push(LS[n][L]);
L -= LS[n][L];
}
while(sol.size())
{
out << sol.top() << " ";
sol.pop();
out << sol.top() << "\n";
sol.pop();
}
out.close();
return 0;
}