Pagini recente » Istoria paginii runda/oji_2011/clasament | Istoria paginii runda/363776673968486 | Istoria paginii runda/rar12 | Istoria paginii runda/oni_10_0/clasament | Cod sursa (job #1467003)
#include <iostream>
#include <fstream>
using namespace std;
ifstream in("energii.in");
ofstream out("energii.out");
const int maxn = 5005;
const int maxg = 10005;
int E[maxn];
int C[maxn];
int dp[maxg];
int main()
{
int n, c;
in >> n >> c;
for(int i = 1; i <= n; i++)
in >> E[i] >> C[i];
int suma = 0;
for(int i = 1; i <= n; i++)
suma = suma + E[i];
if(suma < c)
{
out << -1;
return 0;
}
for(int i = 1; i <= c; i++)
dp[i] = -1;
dp[0] = 0;
for(int i = 1; i <= n; i++)
{
for(int j = c-C[i]; j >= 0; j--)
{
if(dp[j] != -1)
{
dp[j + C[i]] = max(dp[j + C[i]], dp[j] + E[i]);
}
}
}
int i = c;
while(dp[i] == -1)
i++;
out << i;
return 0;
}