Pagini recente » Cod sursa (job #1486943) | Cod sursa (job #829831) | Istoria paginii runda/grigore-moisil-2017-clasele-11-12/clasament | Cod sursa (job #865306) | Cod sursa (job #551712)
Cod sursa(job #551712)
//Problem: energii
//EIUCLAP
#include <cstdio>
#include <algorithm>
#include <bitset>
using namespace std;
//const
const int NMAX=5001;
const int WMAX=1001;
//global vars
int n;
//objects
short e[WMAX],c[WMAX];
int sol[WMAX];
bool b[NMAX][WMAX];
//function def
inline void debug(int);
inline void debug(int *);
//function body
inline void debug(const int x){
fprintf(stderr,"%d\n",x);
}
inline void debug(const int *v){
for(int i=0;i<n;++i)
fprintf(stderr,"%d ",v[i]);
fprintf(stderr,"\n");
}
int main(){
freopen("energii.in","r",stdin);
freopen("energii.out","w",stdout);
//vars
int emin;
int i,j,k;//loop
//read
scanf("%d%d",&n,&emin);
for(i=0;i<n;++i)
scanf("%d%d",&e[i],&c[i]);
//body
fill_n(sol,sol+n,10001);
sol[0]=0;
for(i=1;i<=emin;++i)
for(j=0;j<n;++j){
if(i-e[j]<0 && c[j]<sol[i]){
sol[i]=c[j];
b[i][j]=true;
}
else if (c[j]+sol[i-e[j]]<sol[i] && !b[i-e[j]][j]){
sol[i]=c[j]+sol[i-e[j]];
for(k=0;k<n;++k)
b[i][k]=b[i-e[j]][k];
b[i][j]=true;
}
}
if(sol[emin]==10001)
printf("-1\n");
else
printf("%d\n",sol[emin]);
return 0;
}