Pagini recente » Cod sursa (job #2382315) | Cod sursa (job #843816) | Cod sursa (job #2948035) | Cod sursa (job #1105804) | Cod sursa (job #568613)
Cod sursa(job #568613)
#include <stdio.h>
#include <limits.h>
#include <algorithm>
FILE *f=fopen("energii.in","r");
FILE *g=fopen("energii.out","w");
using namespace std;
int G,W;
int co[10001],minc=INT_MAX;
bool x[5004];
struct energ{
int e;
int c;
};
energ a[1003];
int cmp(energ a,energ b){
if(a.c<b.c)
return 1;
else
return 0;
}
int main(void){
register int i,j;
fscanf(f,"%d %d",&G,&W);
for(i=1;i<=G;i++){
fscanf(f,"%d %d",&a[i].e,&a[i].c);
}
fclose(f);
sort(a+1,a+G+1,cmp);
x[0]=1;
for(i=1;i<=G;i++){
for(j=W;j>=0;j--){
if(x[j]){
if(j+a[i].e>=W){
//am gasit o posibila solutie
if(co[j]+a[i].c<minc){
minc=co[j]+a[i].c;
}
}
else if(j+a[i].e<W){
if(x[j+a[i].e]){
if(co[j+a[i].e]>co[j]+a[i].c){
co[j+a[i].e]=co[j]+a[i].c;
}
}
else{
co[j+a[i].e]=co[j]+a[i].c;
x[j+a[i].e]=true;
}
}
}
}
}
if(minc==INT_MAX)
minc=-1;
fprintf(g,"%d",minc);
return 0;
}