Răspuns :
Iti dau sursa mea la problema tren. Am trecut si descrierea solutiei pentru a o intelege mai bine. Succes!
/* descriere solutie - tren
Notam cu d numarul de vagoane 2^n si cu x vectorul cu numarul de
calatori din fiecare vagon. x are d componente.
La fiecare etapa se imparte vectorul x in doi vectori x1 si x2 cu d1,
respectiv d2 componente, corespunzatori vagoanelor cu numarul de
ordine par, respectiv impar.
d1 si d2 la fiecare pas, raman puteri ale lui 2.
Daca la un moment dat am ajuns la etapa k, atunci se calculeaza suma
s a elementelor vectorului x (corespunzator numarului de calatori din trenul curent)
si se compara cu max, daca max,s, atunci max:=s.
Initial max este 0.
Valoarea finala a lui max este numarul cautat.
*/
#include<cstdio>
#include<cstring>
int max,s,n,i,j,k,p,a[2050],b[2050];
int main()
{
freopen ("tren.in" , "r" , stdin);
freopen ("tren.out" , "w" , stdout);
scanf("%d %d",&n,&k);
p=1;
for (i=1;i<=n;i++) p=p*2;
for(i=1;i<=p;i++) scanf("%d",&a[i]);
i=1;
n=p;
max=n;
while (i<k)
{
s=0;
i++;
j=1;
while (j<n)
{
s++;
b[s]=a[j];
j=j+2;
}
j=2;
while (j<=n)
{
s++;
b[s]=a[j];
j=j+2;
}
max=max/2;
memcpy(a,b,sizeof(b));
memset(b,0,sizeof(b));
}
s=0;
k=0;
i=-1*max;
while (i<=n)
{
i=i+max;
s=0;
for (j=i+1;j<=i+max;j++) s=s+a[j];
if (s>k) k=s;
}
printf("%d",k);
return 0;
}
/* descriere solutie - tren
Notam cu d numarul de vagoane 2^n si cu x vectorul cu numarul de
calatori din fiecare vagon. x are d componente.
La fiecare etapa se imparte vectorul x in doi vectori x1 si x2 cu d1,
respectiv d2 componente, corespunzatori vagoanelor cu numarul de
ordine par, respectiv impar.
d1 si d2 la fiecare pas, raman puteri ale lui 2.
Daca la un moment dat am ajuns la etapa k, atunci se calculeaza suma
s a elementelor vectorului x (corespunzator numarului de calatori din trenul curent)
si se compara cu max, daca max,s, atunci max:=s.
Initial max este 0.
Valoarea finala a lui max este numarul cautat.
*/
#include<cstdio>
#include<cstring>
int max,s,n,i,j,k,p,a[2050],b[2050];
int main()
{
freopen ("tren.in" , "r" , stdin);
freopen ("tren.out" , "w" , stdout);
scanf("%d %d",&n,&k);
p=1;
for (i=1;i<=n;i++) p=p*2;
for(i=1;i<=p;i++) scanf("%d",&a[i]);
i=1;
n=p;
max=n;
while (i<k)
{
s=0;
i++;
j=1;
while (j<n)
{
s++;
b[s]=a[j];
j=j+2;
}
j=2;
while (j<=n)
{
s++;
b[s]=a[j];
j=j+2;
}
max=max/2;
memcpy(a,b,sizeof(b));
memset(b,0,sizeof(b));
}
s=0;
k=0;
i=-1*max;
while (i<=n)
{
i=i+max;
s=0;
for (j=i+1;j<=i+max;j++) s=s+a[j];
if (s>k) k=s;
}
printf("%d",k);
return 0;
}
Vă mulțumim că ați vizitat platforma noastră dedicată Informatică. Sperăm că informațiile oferite v-au fost utile. Dacă aveți întrebări sau aveți nevoie de asistență suplimentară, nu ezitați să ne contactați. Așteptăm cu nerăbdare să vă revedem și nu uitați să ne salvați în lista de favorite!