Pagini recente » Cod sursa (job #1904548) | Cod sursa (job #828328) | Cod sursa (job #1554527) | Cod sursa (job #1367724) | Cod sursa (job #419906)
Cod sursa(job #419906)
//Se da o suma S si n numere naturale. S<=10000
//Sa se scrie s folosind numerele date, pe fiecare cel mult o data
#include <stdio.h>
#define INF 1<<30
int E[1002];
int C[1002];
int W,N;
int v[10001];
int i,j,pmax;
int func(int x) {
if (x>W)
return W;
return x;
}
int main(){
FILE *f = fopen("energii.in","r");
fscanf(f,"%d %d",&N,&W);
for (i=1;i<=N;i++)
fscanf(f,"%d %d",&E[i],&C[i]);
// v[i] = costul minim de a obtine cantitate i de energie
for (i=1;i<=W;i++)
v[i] = INF;
v[0] = 0;
pmax = 0;
for (i=1;i<=N;i++) {
for (j=pmax;j>=0;j--)
if (v[j]!=INF) {
if (v[j]+C[i]<v[ func(j+E[i]) ])
v[func(j+E[i])] = v[j]+C[i];
if (func(j+E[i])>pmax)
pmax = func(j+E[i]);
}
}
FILE *g = fopen("energii.out","w");
if(v[W] == INF)
fprintf(g,"-1");
else
fprintf(g,"%d",v[W]);
fclose(g);
fclose(f);
return 0;
}