Pagini recente » Cod sursa (job #2340670) | Cod sursa (job #261958) | Cod sursa (job #1045146) | Cod sursa (job #2240117) | Cod sursa (job #938155)
Cod sursa(job #938155)
#include <fstream>
#include <cstring>
#define NMAX 1009
#define GMAX 10009
using namespace std;
ifstream f("energii.in"); ofstream g("energii.out");
int N, S, G[NMAX], P[NMAX];
int DP[GMAX];
inline void read_Data() {
f >> N >> S;
for(int i = 1; i <= N; ++i) f >> P[i] >> G[i];
}
inline void solve() {
int minim = 9999999999999;
memset(DP, -1, sizeof(DP));
DP[0] = 0;
for(int i = 1; i <= N; ++i)
for(int j = S; j >= 0; --j)
if(DP[j] != -1){
if(j + P[i] > S)
if(G[i] + DP[j] < minim)
minim = DP[j] + G[i];
if(j + P[i] <= S)
if(DP[j] + G[i] > DP[j + P[i]] || DP[j + P[i]] == -1)
DP[j + P[i]] = DP[j] + G[i];
}
if(DP[S] == -1 && minim == 9999999999999) g << "-1\n";
else {
if(DP[S] == -1) g << minim << '\n';
else g << min(minim, DP[S]);
}
}
int main() {
read_Data();
solve();
g.close();
return 0;
}