Ottengo 0/0 su questo problema…
Ormai sono entrato in confusione… gradirei aiuto o almeno una dritta…

Grazie in anticipo!
#include<iostream>
#include<fstream>
using namespace std;
int subset(long int v[],int n,int i){
int tempS=0,tempSL=0,tempSR=0;
if(i>=n){
return 0;
}else{
if(v[i]%v[i-1]==0||v[i-1]%v[i]==0){
tempSL+=2+subset(v,n,i+2);
}
if(v[i]%v[i+1]==0||v[i+1]%v[i]==0){
tempSR+=2+subset(v,n,i+3);
}
tempS+=subset(v,n,i+2);
if(tempS<tempSR){
tempS=tempSR;
}
if(tempS<tempSL){
tempS=tempSL;
}
return tempS;
}
}
int main()
{
ifstream leggi("input.txt");ofstream scrivi("output.txt");
int n;
leggi>>n;
long int v[n];
int S=0;
if(n>1){
for(int i=0;i<n;i++){
leggi>>v[i];
}
S= subset(v,n,1);
scrivi<<S;
}
}
Prova a spiegare quello che cerchi di fare
1 Mi Piace
Allora, spero di poter essere chiaro 
La variabile S conterrà il numero massimo di elementi che messi a coppie soddisfano la condizione richiesta:(Sj%Si=0)(Si%Sj=0).
Per trovare il valore di S ho pensato di creare una funzione, che si richiama ricorsivamente, in modo da poter “esaminare” ogni singolo caso.
Cioè, partendo dal secondo elemento(i=1), si controlla se l’elemento del vettore rispecchia le condizioni poste dal problema andando a fare il confronto sia con l’elemento “alla sua sinistra” i-1, sia con l’elemento “alla sua destra” i+1.
Se in uno o in entrambi dei casi la condizione si avveri si richiamerà una nuova funzione con i+2 nel caso in cui la condizione con l’elemento alla sua sinistra risulti vera, invece, se la la condizione si dovesse essere vera anche per l’elemento alla sua destra il parametro dato non sarà più i+2 ma i+3 perchè l’elemento non potrebbe effettuare il controllo alla sua sinistra visto che è stato già contato come coppia con l’elemento precedente.
I risultati delle diverse ricorsioni vengono memorizzate da tempSL,tempS e tempSR, la funzione ritornerà il valore della variabile col valore più grande;
Comunque, eseguendo il codice dal mio computer, il codice restituisce l’output corretto prendendo come input i dati messi come esempio dal problema.
Devi trovare l insieme più grande in cui tra ogni coppia di questo insieme viene verificata la priorietà che A % B == 0 || B % A == 0.
Da quello che ho capito tu verifichi solo l ultima coppia aggiunta e prendi le coppie solo in un insieme continuo.
Con questo caso di test il tuo programma crasha :
5
2 15 45 4 135
L output di questo test case deve essere 3 formato dal insieme 15 45 135.
Con questo test case invece il tuo algoritmo risponde 6 al posto di 4
6
2 4 15 45 135 1
Nel caso in cui N sia uguale a 1, il tuo algoritmo non scrive nessun valore nel file di output.
1 Mi Piace