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 pentru vizita pe site-ul nostru dedicat Informatică. Ne dorim ca informațiile furnizate să vă fi fost utile. Dacă aveți întrebări sau aveți nevoie de suport suplimentar, nu ezitați să ne contactați. Revenirea dumneavoastră ne bucură, iar pentru acces rapid, adăugați-ne la favorite!