Pagini recente » Cod sursa (job #3364285) | Cod sursa (job #3364291) | Cod sursa (job #3364274) | Cod sursa (job #3362989) | Cod sursa (job #3364295)
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef size_t ull;
typedef vector<int> vc;
typedef vector<vector<int>> matrix;
#define ft(n) for(int i=1; i<=n; i++)
#define sp ' '
#define vx first
#define vy second
string file = "energii";
ifstream f(file + ".in");
ofstream g(file + ".out");
int n, G, P;
vector<int> p, w;
vector<vector<int>> dp;
void init()
{
f >> n >> P;
p.resize(n + 1, 0);
w.resize(n + 1, 0);
ft(n)
{
f >> p[i] >> w[i];
G = max(G, w[i]);
}
dp.resize(2, vc(G + 1, 0));
}
int proc()
{
for (int i = 1; i <= n; i++)
{
for (int j = 0; j <= G; j++)
{
dp[i % 2][j] = dp[(i - 1) % 2][j];
if (j >= w[i])
dp[i % 2][j] = max(dp[i % 2][j], dp[(i - 1) % 2][j - w[i]] + p[i]);
}
}
for (int j = 1; j <= G; j++)
{
dp[0][j] = max(dp[0][j], dp[1][j]); //doesn't need the newest values, just the biggest
if (dp[0][j] >= P) return j;
}
return -1;
}
int main()
{
init();
g << proc();
return 0;
}