Cod sursa(job #2505961)
| Utilizator | Data | 7 decembrie 2019 12:20:03 | |
|---|---|---|---|
| Problema | Energii | Scor | 0 |
| Compilator | cpp-64 | Status | done |
| Runda | Arhiva de probleme | Marime | 1.25 kb |
#include <bits/stdc++.h>
#define NRMAX 1001
using namespace std;
ifstream fin("energii.in");
ofstream fout("energii.out");
int DP[NRMAX];
int main()
{
int n,P,i,j,cost,en;
fin>>n>>P;
for(i = 1 ; i <= n; i++)
{
fin>>en>>cost;
for(j = P; j >= 1; j--)
{
if(DP[j] != 0)
{
if(j + en >= P)
{
if(DP[P] == 0)
{
DP[P] = DP[j] - cost;
}
else
{
DP[P] = max(DP[P],DP[j]-cost);
}
}
else
{
if(DP[j+en] == 0)
{
DP[j+en] = DP[j] - cost;
}
else
{
DP[j+en] = max(DP[j+en],DP[j]-cost);
}
}
}
}
if(DP[en] != 0)
DP[en] = max(DP[en],-cost);
else
DP[en] = -cost;
}
if(DP[P] == 0)
{
fout<<"-1"<<endl;
}
else
{
fout<<-DP[P]<<endl;
}
return 0;
}
