Cod sursa(job #676526)
#include<stdio.h>
#define INF 51000000
FILE *f , *g ;
int n , w ;
long c[2][5001] , rez ;
struct A{
int p,c;
}v[1001];
void citire();
void solve();
void tipar();
long min(long x , long y)
{
if(x < y)
return x;
return y;
}
int main()
{
citire();
solve();
tipar();
return 0;
}
void citire()
{
f=fopen("energii.in" , "r" );
fscanf(f , "%d%d" , &n , &w );
for(int i = 1 ; i<= n ; ++i )
fscanf(f , "%d%d" , &v[i].p , &v[i].c );
fclose(f);
}
void solve()
{
for(int i = 1 ; i<= w ; ++i )
c[0][i] = INF;
int x = 1;
for(int i = 1 ; i<= n ; ++i ,x = 1-x)
for(int j = 1 ; j <= w ; ++j )
if(v[i].p < j)
c[x][j] = min(v[i].c+c[1-x][j-v[i].p],c[1-x][j]);
else
c[x][j] = min(v[i].c,c[1-x][j]);
if(c[1-x][w] == INF)
rez = -1;
else
rez = c[1-x][w];
}
void tipar()
{
g=fopen("energii.out" , "w" );
fprintf(g , "%ld" , rez );
fclose(g);
}