Pagini recente » Cod sursa (job #2670625) | Cod sursa (job #348619) | Cod sursa (job #1654146) | Cod sursa (job #600223) | Cod sursa (job #419901)
Cod sursa(job #419901)
//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 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 (j+E[i]<=W) {
if (v[j]+C[i]<v[j+E[i]])
v[j+E[i]] = v[j]+C[i];
if (j+E[i]>pmax)
pmax = j+E[i];
} else {//j+E[i]>W
if (v[W]>v[j]+C[i]) {
v[W] = v[j]+C[i];
pmax = W;
}
}
//obtin 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;
}