Pagini recente » Cod sursa (job #996007) | Cod sursa (job #317079) | Cod sursa (job #707517) | Cod sursa (job #703385) | Cod sursa (job #1542869)
#include <stdio.h>
#include <limits.h>
/** Algoritm problema "Energii":
* - cand j < W,
* - costul minim necesar pentru a obtine energia "j".
* d[j] = ---------------------------------------------------
* - cand j >= W,
* - costul minim necesar pentru a obtine energie "j"(mai exact, pentru a
* porni centrala).
*
**/
#define Nadejde 5000
int G, W;
int d[Nadejde + 1];
/** Initializeaza vectorul "d". **/
void init() {
int i;
for (i = 0; i <= W; i++) {
d[i] = INT_MAX;
}
d[0] = 0;
}
/** Afla minimul dintre "curr" si d[pos]. **/
void compare(int curr, int pos) {
if (curr < d[pos]) {
d[pos] = curr;
}
}
int main(void) {
int i, j, e, c;
FILE *f = fopen("energii.in", "r");
/* Citirea datelor. */
fscanf(f, "%d %d", &G, &W);
init();
/* Calcularea solutiei. */
for (i = 0; i < G; i++) {
fscanf(f, "%d %d", &e, &c);
for (j = W; j >= 0; j--) {
if (d[j] != INT_MAX) {
if (j >= W) {
compare(d[j] + c, W);
} else {
compare(d[j] + c, j + e);
}
}
}
}
fclose(f);
/* Afisarea solutiei. */
f = fopen("energii.out", "w");
fprintf(f, "%d\n", d[W] == INT_MAX ? -1 : d[W]);
fclose(f);
/// Multumim Doamne!
puts("Doamne ajuta!");
return 0;
}