Pagini recente » Cod sursa (job #275450) | Cod sursa (job #1778775) | Cod sursa (job #144758) | Cod sursa (job #453283) | Cod sursa (job #301725)
Cod sursa(job #301725)
#include<stdio.h>
#define N 20001
#define G 5001
#define INF 100000001
#define min(a,b) a<b ? a:b
int n,r,pmax,a1[N],a2[N];
struct gen{
int w,p;
};
gen g[G];
void cit()
{
scanf("%d%d",&n,&r);
for( int i=0 ; i<n ; ++i )
{
scanf("%d%d",&g[i].w,&g[i].p);
pmax+=g[i].w;
}
for( int i=0 ; i<N ; ++i )
a1[i]=a2[i]=INF;
}
void calc()
{
a2[g[0].w]=g[0].p;
a1[g[0].w]=g[0].p;
for( int i=1 ; i<n ; ++i )
{
a2[g[i].w]=g[i].p;
for( int j=0 ; j<=pmax ; ++j )
if(a1[j]!=INF)
a2[ j + g[i].w ] = min( a1[j] + g[i].p , a2[ j + g[i].w ] ) ;
for( int j=0 ; j<=pmax ; ++j )
a1[j]=a2[j];
}
int cost=INF;
for( int i=r ; i<=pmax ; ++i )
cost=min( a1[i] , cost );
printf("%d\n",cost);
}
int main()
{
freopen("energii.in","r",stdin);
freopen("energii.out","w",stdout);
cit();
if(pmax<r)
{
printf("-1\n");
return 0;
}
calc();
return 0;
}