Cod sursa(job #2501383)
| Utilizator | Data | 29 noiembrie 2019 16:56:30 | |
|---|---|---|---|
| Problema | Energii | Scor | 0 |
| Compilator | cpp-64 | Status | done |
| Runda | Arhiva de probleme | Marime | 1.06 kb |
#include<bits/stdc++.h>
using namespace std;
ifstream fin("numere.in");
ofstream fout("numere.out");
int DP[10001];
int main(){
int n,P,i,j,cost,en;
fin>>n>>P;
for(i = 0; i <= P; i++){
DP[i] = 1;
}
for(i = 1 ; i <= n; i++){
fin>>en>>cost;
for(j = P; j >= 1; j--){
if(DP[j] != 1){
if(j + en >= P){
if(DP[P] == 1){
DP[P] = DP[j] - cost;
}else{
DP[P] = max(DP[P],DP[j]-cost);
}
}else{
if(DP[j+en] == 1){
DP[j+en] = DP[j] - cost;
}else{
DP[j+en] = max(DP[j+en],DP[j]-cost);
}
}
}
}
if(DP[en] != 1)
DP[en] = max(DP[en],-cost);
else
DP[en] = -cost;
}
if(DP[P] == 1){
fout<<"-1"<<'\n';
}else{
fout<<-DP[P]<<'\n';
}
return 0;
}
