Afişează mesaje
|
Pagini: [1]
|
11
|
infoarena - concursuri, probleme, evaluator, articole / Arhiva de probleme / Răspuns: 661 Reteta
|
: Februarie 25, 2008, 23:07:27
|
m-am uitat pe sursa .. si intradevar era o matrice a [ x ] [ y ] unde y era declarat ca 'float' insa avea valoarea unui nr natural fara zecimale. aceasta problema ne-a fost data la sc si atat am putut sa fac in limita timpului. profesoara nu a stiut sa corecteze problema si mi-a zis sa caut pe net surse de erori posibile la sursa mea.. #include <fstream.h> int main() {float r[20][30],s,v[200][30]; int n,m,i,j,p[21],poz,poz2,k,x2,min,max,gasit,aux[20],x3; ifstream f("reteta.in"); ofstream g("reteta.out"); f>>n; f>>m; for (i=1;i<=m;i++) {f>>r[i][1]>>r[i][2]; for(j=3; j<=r[i][2]+2; j++) f>>r[i][j]; } for (i=1; i<=n; i++) f>>p[i]; //citiri
for (i=1; i<=m;i++) {s=0; for(j=3; j<=r[i][2]+3; j++) {x2 = r[i] [j]; s = s + p[x2];} if (r [ i ] [1]==1) r [ i ] [ 0 ] = s; else r [ 1 ] [ 0 ] = s / 2;} // calculam valoarea fiecarei retete
poz=1; for(i=m;i>=1;i--) {j=1; while (i+j<=m+1) {poz2=2; v[poz][1]=i; for (k=j; k<=i+j-1; k++) {v[poz][0]=v[poz][0] + r[k][0]; v[poz][poz2]=k; poz2++;} j++;poz++;}} // aflam valoarea tuturor combinatiilor de retete posibile
max=1; for (i=1;i<=n;i++) max=max+p[i];
gasit=0; while (gasit==0) { min=max;poz2=0; for(i=1;i<=poz-1; i++) if (min > v [ i ] [ 0 ] ) {min = v [ i ] [ 0 ]; poz2=i;} //gasim pretul minim din retetele gasite for(i=1;i<=n;i++) aux[i]=0; for(i=2;i<=v[poz][1];i++) {x2=v[poz2][i]; for (j=3; j<=r[x2][2]+3; j++) {x3=r[x2][j]; aux[x3]=1;}} gasit=1; for(i=1;i<=n;i++) // verificam daca valorile gasite sunt favorabile if(aux[i]==0) gasit=0; if(gasit==1) g<<v[poz][0]; // afisare else v[poz][0]=max; } f.close(); g.close(); return 0; }
V-as fi recunoscator daca mi-ati spune unde este gresala ( pt a functiona algoritmul n pt a lua 100 pct pe problema  ) .mc Editat de admin: Pentru a include cod trebuie sa folosesti tagul code, nu quote  .
|
|
|
|