Fette di strudel?

ho provato a risolvere fette di strudel così ma mi da 4 o 5 casi che sono in errore (nel senso prorpio sbagliato) 

ho cercato l’errore e credo di averlo trovato nel concetto, ma magari è così piccolo che non so se sia quella la causa. comunque, per chi si è letto il testo, lo risolvo così 

Si definisce il vettore di base che è la differenza tra
cannella e mandorle (vett[i]= cannella[i] – mandorle[i])

Si definisce poi il vettore delle somme prefisse (*)

Il vettore delle somme prefisse lo ordino tengo gli indici, vale a dire che nel vettore finale ci sono dei numeri corrispondenti agli indici che indicano appunto i valori in ordine crescenti presenti nel vettore somme prefisse.

Vale a dire, che se il vettore base era questo

0   1   2   3   4   5    indici
-7  2  10 3   0  -1  valori

il vettore somme prefisse sarà

0   1    2    3   4   5   6    indici
0  -7   -5   5    8   8  7    valori

E il vettore ordinato (che contiene indici dunque sarà)

0   1  2  3  4  5   indici
1  2   3  6  4  5     valori

Ora per trovare il pezzo più lungo basta trovare la più grossa differenza tra indici e lo fai in tempo lineare (se volete http://stackoverflow.com/questions/18956740/how-to-find-the-largest-difference-in-an-array  )

 

Però la più lunga differenza tra y-x deve rispettare il criterio che la somma dei valori tra vett[y] e vett[x] compresi è >=0

Ed è qui che sorge il problema perché questa non è semplicemente somme prefisse[y] – somme prefisse[x] , no, è somme prefisse[y] – somme prefisse[x] + vett[y] , per come è definito il vettore somme prefisse. E così mi sorge il dubbio che sia sbagliato perché io vado appunto a ordinare il vettore delle somme prefisse, e non posso aggiungerci cose a mio piacimento dopo l’ordinamento.

Quindi o si definisce decentemente un vettore somme prefisse ( ma come???????) oppure si tiene testa a questa cosa ma veramente non mi viene in mente niente. Help?

 (spero che abbiate capito circa come lo ho risolto). Ad ogni modo, sono sicuro che esistano altre soluzioni, ma mi piacerebbe tanto capire perché questa non va :) .

*Il vettore delle somme prefisse comunque lo definisco come

Somme[0]=0;

Somme[i]= somme[i-1] + vett[i-1];

anche se si facesse “”l’inverso””, cioè che somme[0]=vett[0] e poi somme[i] = somme[i-1] + vett[i] si ripresenterebbe lo stesso problema, perché poi per trovare la somma degli elementi in un segmento dovrei fare somme[y] – somme[x] + vett[x]. Idee? 

Nota che la somma di [i…j] è sia uguale a sum[j]-sum[i]+vet[i] ,  ma anche a sum[j]-sum[i-1]. Quindi nel momento in cui trovi la soluzione migliore con i e j, in realtà stai considerando il subarray [i+1…j]

eh infatti, proprio questo stavo dicendo… però il fatto è: siccome gli indici sono ordinati, non ha prorpio senso ed è sbagliato (in teoria) andare su altri indici da quelli che considero

ah beh questa è bella

saltando il controllo nella parte finale e dando per scontato che se gli indici sono ordinati come sono, allora la somma vett[i…j] è >=0 (che è teoricamente parzialmente vero)…allora funziona tutto 
ma ci sono due cose
- la prima è che come hai detto tu, sum [j]- sum[i] corrisponde al vett[i-1…j] e non al vett[i…j]
- la seconda è che nella soluzione giusta bisogna considerare anche lo 0 delle somme prefisse, che è un indice inutile…

io davvero non ci capisco una mazza di sto problema… me aiutate :)?

Anche l’indice zero delle somme prefisse va considerato altrimenti bruci tutte le soluzioni che nel vettore originale iniziano con il primo elemento (indice 0 o 1 dipende da come hai salvato i dati).