Pagini recente » Cod sursa (job #1966066) | Cod sursa (job #143206) | Cod sursa (job #48918) | Cod sursa (job #766564) | Cod sursa (job #412858)
Cod sursa(job #412858)
#include<fstream>
#include<algorithm>
#define MAXN 5010
const int x = 9999999;
using namespace std;
ifstream f ("energii.in");
ofstream g ("energii.out");
int G,W,sol,dp[MAXN];
typedef struct{
int g,c;
}generator;
generator v[1001];
void read_data()
{
int i;
f >> G >> W;
for(i = 1 ; i <= G ; i++)
f >> v[i].g >> v[i].c;
}
void solve()
{
int i , j,gmax , gm ;
dp[0] = 1;
sol = x;
gmax = 1;
for( i = 1 ; i <= G ; i++ )
{
gm = gmax;
for(j = gmax ; j >= 0 ; j--)
{
if(j == 0)
{
if(v[i].g >= W && v[i].c < sol)
sol = v[i].c;
else
if(dp[v[i].g] > v[i].c || dp[v[i].g] == 0)
{
dp[v[i].g] = v[i].c;
if(v[i].g > gm)
gm = v[i].g;
}
}
else
{
if( j + v[i].g >= W && dp[j] + v[i].c < sol)
sol = dp[j]+ v[i].c;
else
if(dp[j+v[i].g] > dp[j] + v[i].c || dp[j+v[i].g] == 0)
{
dp[j+v[i].g] = dp[j] + v[i].c;
if(j + v[i].g > gm)
gm = j + v[i].g;
}
}
}
gmax = gm;
}
}
void print()
{
if(sol!=x)
g << sol << '\n';
else
g << "-1\n";
}
int main (void)
{
read_data();
solve();
print();
return 0;
}