Per risolvere questo tipo di esercizi si può usare una tecnica chiamata Backtracing, è un algoritmo ricorsivo che esplora in maniera sistematica un insieme di possibilità. In pratica parti da un elemento e lo sommi col successivo valido, a cascata fino a che raggiugi l' ultima riga. Arrivato a questo punto guardi se la somma è maggiore delle somme precedenti e aggiorni la variabile max. Poi la funzione ricorsiva torna indieto di un passo seleziona la somma con un altro elemento ecc.
Prova a guardare questo codice:
#include <stdio.h>
#include <limits.h>
#define V 3
#define F 5
int A[V][F] = { { 1, 7, 3, 4, 5 }, { 6, 1, 9, 6, 1 }, { 3, 2, 1, 6, 8 } };
int max;
void StampaElementi()
{
int i, j;
for(i = 0; i < V; i++)
{
for(j = 0; j < F; j++)
{
printf("%d ",A[i][j]);
}
printf("\n");
}
}
void EsploraQuelliSotto(int di, int dj, int somma)
{
int i, j;
i = di + 1;
j = dj + 1;
if (i == V)
{
if (somma > max)
max = somma;
return;
}
while( j < F )
{
EsploraQuelliSotto(i, j, somma + A[i][j]);
++j;
}
}
void main()
{
int j;
max = INT_MIN;
StampaElementi();
for(j = 0; j < F; ++j)
{
EsploraQuelliSotto(0, j, A[0][j]);
}
printf("Somma Max: %d", max);
}
Restituisce il valore corretto, però usalo solo come traccia per capire il meccanismo delle ricorsione.
Poi bisognerebbe migliorarlo, ma questa non è l' ora giusta.