Pagini recente » Cod sursa (job #2768326) | Cod sursa (job #1056301) | Cod sursa (job #1082005) | Cod sursa (job #570772) | Cod sursa (job #2669967)
#include <iostream>
#include <fstream>
using namespace std;
const int NMAX = 1e3;
const int GMAX = 1e4;
int dp[2][GMAX + 1];
struct obiect {
int weight;
int price;
} v[NMAX + 1];
int main() {
ifstream fin( "energii.in" );
ofstream fout( "energii.out" );
int n, g, i;
fin >> n >> g;
for ( i = 1; i <= n; i ++ ) {
fin >> v[i].price >> v[i].weight;
}
for ( i = 1; i <= GMAX; i ++ ) {
dp[1][i] = -1;
}
dp[1][v[1].price] = v[i].weight;
int x = 1;
for ( i = 2; i <= n; i ++ ) {
x = 1 - x;
for ( int j = 0; j < v[i].price; j ++ ) {
dp[x][j] = dp[1 - x][j];
}
for ( int j = v[i].price; j <= GMAX; j ++ ) {
if ( dp[1 - x][j - v[i].price] == -1 )
dp[x][j] = dp[1 - x][j];
else if ( dp[1 - x][j] == -1 )
dp[x][j] = dp[1 - x][j - v[i].price] + v[i].weight;
else {
dp[x][j] = min( dp[1 - x][j], dp[1 - x][j - v[i].price] + v[i].weight );
}
}
}
int minim = 1e9;
for ( i = g; i <= GMAX; i ++ ) {
if ( dp[x][i] != -1 ) {
minim = min( minim, dp[x][i] );
}
}
if ( minim == 1e9 )
fout << -1;
else
fout << minim;
return 0;
}