Pagini recente » Cod sursa (job #2743689) | Cod sursa (job #2125893) | Cod sursa (job #1114759) | Cod sursa (job #2119838) | Cod sursa (job #444158)
Cod sursa(job #444158)
#include <cstdio>
int a[2][25000000];
void make_empty(bool currentline,int max) {
for (int i=0;i<=max;i++) {
a[currentline][i] = 0;
}
}
int main() {
FILE *ff,*gg;
ff = fopen("energii.in","r");
gg = fopen("energii.out","w");
int g, w;
fscanf(ff,"%d\n%d\n",&g,&w);
int e,c;
bool currentline=1;
fscanf(ff,"%d %d\n", &e, &c);
a[0][e] = c;
for (int i=1; i<g; ++i) {
fscanf(ff,"%d %d\n", &e, &c);
//berakja az elotte levo elemeket
for (int j=1; j<e; j++) {
a[currentline][j] = a[!currentline][j];
}
if (a[!currentline][e]>c || a[!currentline][e]==0) a[currentline][e]=c; else a[currentline][e] = a[!currentline][e];
//az elemtol kezdodoen
for (long j=e+1; j<=w+5001; j++){
/*if (a[!currentline][j-e]==0)
if (c<a[!currentline][j]) a[currentline][j] = c; else a[currentline][j] = a[!currentline][j];
if (a[currentline][j]>a[!currentline][j-e]+c) a[currentline][j]=a[!currentline][j-e]+c;
*/
/*if (a[!currentline][j]>0 && a[!currentline][j-e]+c<a[!currentline][j]) a[currentline][j] = a[!currentline][j-e]+c;
//else if (a[!currentline][j]>0) a[currentline][j] = a[!currentline][j];
else if (a[!currentline][j-e]==0) a[currentline][j] = a[!currentline][j];
*/
if (a[!currentline][j]>0 && a[!currentline][j-e]>0 && a[!currentline][j-e]+c<a[!currentline][j])
a[currentline][j] = a[!currentline][j-e]+c;
else if (a[!currentline][j]>0 && a[!currentline][j-e]>0 && a[!currentline][j-e]+c>a[!currentline][j])
a[currentline][j] = a[!currentline][j];
else if (a[!currentline][j]==0 && a[!currentline][j-e]>0)
a[currentline][j] = a[!currentline][j-e]+c;
else if (a[!currentline][j]>0 && a[!currentline][j-e]==0)
a[currentline][j] = a[!currentline][j];
}
currentline = !currentline;
make_empty(currentline,w*w);
}
int min=32000;
for (long i=w; i<=w+5001; ++i) {
if (a[!currentline][i]!=0 && a[!currentline][i]<min) min=a[!currentline][i];
}
if (min == 32000) {
fprintf(gg,"-1");
} else {
fprintf(gg,"%d",min);
}
fclose(ff);
fclose(gg);
return 0;
}