Pagini recente » Cod sursa (job #1946087) | Cod sursa (job #573087) | Diferente pentru documentatie/textile intre reviziile 102 si 103 | Monitorul de evaluare | Cod sursa (job #1098548)
#include <cstdio>
#define MAX 5550
#define MAXX 100000100
using namespace std;
struct rucsac{
int w,pret;
}q[MAX];
int minim(int a,int b);
int n,k,d[MAXX],i,j,min,aux;
int main()
{
freopen("energii.in","r",stdin);
freopen("energii.out","w",stdout);
scanf("%d%d",&n,&k);
for(i=1;i<=n;++i)scanf("%d%d",&q[i].w,&q[i].pret);
for(i=1;i<=k;++i)d[i]=MAX*MAX;
d[0]=0;
min=MAX*MAX;
for(j=1;j<=n;++j){
for(i=k;i>=0;--i)
{
if(d[i]!=MAX*MAX){
aux=d[i]+q[j].pret;
if(!d[i+q[j].w])d[i+q[j].w]=MAX*MAX;
d[i+q[j].w]=minim(d[i+q[j].w],aux);
if(i+q[j].w>=k)
if(d[i+q[j].w]<min)min=d[i+q[j].w];
if(i>=k)
if(d[i]<min)min=d[i];
}
}
}
if(min!=MAX*MAX)
printf("%d\n",min);
else printf("-1\n");
return 0;
}
int minim(int a,int b)
{
if(a>b)return b;
return a;
}