Pagini recente » Cod sursa (job #352503) | Cod sursa (job #2382958) | Cod sursa (job #1202988) | Cod sursa (job #2526035) | Cod sursa (job #906799)
Cod sursa(job #906799)
#include<stdio.h>
#include<stdlib.h>
int g, w, eg[10001], cg[10001];
int sol[1000], cMin = 0xfffff;
void read() {
FILE *fin;
int i;
fin = fopen("energii.in","r");
fscanf(fin,"%d",&g);
fscanf(fin,"%d",&w);
for(i = 0; i < g; i++)
fscanf(fin,"%d %d",&eg[i],&cg[i]);
fclose(fin);
}
int existaSol(){
int s = 0, i;
for(i = 0; i < g; i++) {
s += eg[i];
if(s >= w)
return 1;
}
return 0;
}
int solutie(int k) {
int i, s = 0;
for(i = 1; i <= k; i++)
s += eg[sol[i]];
//printf("A");
if (s >= w)
return 1;
return 0;
}
int valid(int k) {
int i;
for (i = 1; i < k; i++)
if (sol[i] >= sol[k])
return 0;
return 1;
}
int ex(int x, int n) {
int i;
for(i = 1; i <= n ; i++)
if(sol[i] == x)
return 0;
return 1;
}
int getCost(int k) {
int i, c = 0;
for (i = 1; i <= k; i++)
c += cg[sol[i]];
if(c < cMin)
cMin = c;
}
void back(int k) {
int i;
/*for(i = 1; i <= k; i++)
printf("%d(%d) ",eg[sol[i]],cg[sol[i]]);
printf("\n");
*/
for(i = 0; i < g ; i++) {
if(ex(i,k)) continue;
sol[k] = i;
//printf("\n%d ",valid(k));
if (valid(k)) {
// printf("asd");
if(solutie(k))
getCost(k);
else
back(k+1);}
}
}
void solve() {
FILE *fout;
fout = fopen("energii.out","w");
if (!existaSol()) {
fprintf(fout,"-1");
fclose(fout);
return;
}
else
back(1);
fprintf(fout,"%d",cMin);
fclose(fout);
}
int main() {
read();
solve();
//printf("%d",cMin);
return 0;
}