Pagini recente » Cod sursa (job #1767293) | Cod sursa (job #1806042) | Cod sursa (job #1531342) | Borderou de evaluare (job #508775) | Cod sursa (job #349420)
Cod sursa(job #349420)
#include <iostream>
using namespace std;
int main() {
int g, w, e[100], c[100], uz[100][100], cost[100];
int i, j, k, min=99999, max=0, t;
FILE *in=fopen("energii.in", "r"), *out=fopen("energii.out", "w");
//citesc datele de intrare
fscanf(in, "%d%d", &g, &w);
for(i=1; i<=g; i++) {
fscanf(in, "%d%d", &e[i], &c[i]);
//stabilesc minimul costurilor
if(c[i]<min) {
min=c[i];
t=i;
}
//stabilesc suma costurilor
max+=c[i];
}
for(i=1; i<min; i++) {
cost[i]=0;
for(j=1; j<=g; j++) {
uz[i][j]=0;
}
}
//setez cost/uz pentru minim
cost[min]=min;
uz[min][t]=1;
//incepere algoritm
for(j=min+1; j<max; j++) {
cost[j]=999999;
//incerc sa obtin cost[j]
for(i=1; i<=g; i++) {
//iau fiecare e[i] in parte
if(j-e[i]>0 && uz[j-e[i]][i]==0) {
//cost[j]=cost[j-e[i]]+c[i]
if(cost[j-e[i]]+c[i]<cost[j]) {
cost[j]=cost[j-e[i]]+c[i];
for(k=1; k<=g; k++) {
uz[j][k]=uz[j-e[i]][k];
}
uz[j][i]=1;
}
}
}
}
min=999999;
for(j=w; j<max; j++) {
//calculez minimul
if(cost[j]<min) {
min=cost[j];
}
}
fprintf(out, "%d", min);
fclose(in); fclose(out);
return 0;
}