Pagini recente » Cod sursa (job #1499258) | Cod sursa (job #1218611) | Cod sursa (job #1518686) | Cod sursa (job #683762) | Cod sursa (job #2699362)
#include <fstream>
#include <algorithm>
using namespace std;
const int INF = (int) 1e9;
int main() {
ifstream cin("date.in");
ofstream cout("date.out");
//dp[G+1][W+1] - costul minim pentru a genera o en. mai mare sau egala cu W folosind o submultime a primelor G elemente
int G, W;
cin >> G >> W;
int EG[G+1], CG[G+1];
for(int i=1;i<=G;i++)
cin >> EG[i] >> CG[i];
int S=0;
for(int i=1;i<=G;i++)
S+=EG[i];
if(S<W) {
cout << -1;
return 0;
}
int dp[S+1];
dp[0] = 0;
for(int i=1;i<=S;i++)
dp[i] = INF;
for(int i=1;i<=G;i++) {
for(int j=S;j>=1;j--) {
if(j>=EG[i])
dp[j] = min(dp[j], dp[j-EG[i]]+CG[i]);
}
}
int MN = dp[W];
for(int i=W+1;i<=S;i++)
MN=min(MN, dp[i]);
cout << MN;
return 0;
}