Pagini recente » Cod sursa (job #935444) | Cod sursa (job #3195750) | Cod sursa (job #659712) | Cod sursa (job #961875) | Cod sursa (job #3285648)
#include <fstream>
using namespace std;
ifstream f("lapte.in");
ofstream g("lapte.out");
const int inf = 1e9;
struct ceva{
int timp, lv1, lv2;
}dp[105][50][50];
int n, k;
void path(int ind, int p1, int p2)
{
if(ind < 1)
return;
path(ind - 1, p1 - dp[ind][p1][p2].lv1, p2 - dp[ind][p1][p2].lv2);
g << dp[ind][p1][p2].lv1 << " " << dp[ind][p1][p2].lv2 << '\n';
}
int main()
{
f >> n >> k;
for(int i = 0; i <= n; i ++)
for(int j = 0; j <= 2 * k; j ++)
for(int t = 0; t <= 2 * k; t ++)
dp[i][j][t] = {inf, inf, inf};
dp[0][0][0] = {0, 0, 0};
for(int i = 1; i <= n; i ++)
{
int x, y; f >> x >> y;
for(int v1 = 0; v1 <= k; v1 ++)
for(int v2 = 0; v2 <= k; v2 ++)
for(int l1 = 0; l1 <= k; l1 ++)
for(int l2 = 0; l2 <= k; l2 ++)
{
if(dp[i - 1][l1][l2].timp == inf)
continue;
int tmax = max(dp[i - 1][l1][l2].timp, x * v1 + y * v2);
if(dp[i][l1 + v1][l2 + v2].timp > tmax)
dp[i][l1 + v1][l2 + v2] = {tmax, v1, v2};
}
}
int p1 = 0, p2 = 0, t = inf;
for(int i = k; i <= 2 * k; i ++)
for(int j = k; j <= 2 * k; j ++)
if(dp[n][i][j].timp < t)
t = dp[n][i][j].timp, p1 = i, p2 = j;
g << t << '\n';
path(n, p1, p2);
return 0;
}