Pagini recente » Cod sursa (job #2282218) | Cod sursa (job #1507181) | Cod sursa (job #2372698) | Cod sursa (job #1706146) | Cod sursa (job #551708)
Cod sursa(job #551708)
//Problem: energii
//EIUCLAP
#include <cstdio>
#include <algorithm>
#include <bitset>
using namespace std;
//const
const int NMAX=5000;
//global vars
int n;
//objects
short e[NMAX],c[NMAX];
int sol[NMAX];
bool b[NMAX][NMAX];
//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;
}
}
printf("%d\n",sol[emin]);
return 0;
}