Number Game (subset) 10pt

Salve, sto provando a risolvere questo problema in dp ed essenzialmente il mio ragionamento è di guardare per ogni valore i risultati intermedi dei precedenti e qualora il valore sia divisibile con un valore precedente o viceversa prendere la soluzione migliore fino a questo punto. Però faccio solo il primo testcase e non riesco a trovare input per cui non funzioni. Per esempio non so se il testo accetta un numero come coppia con se stesso ma anche facendo questa modifica non risolvo. Qualche idea?

    #include <bits/stdc++.h>

    using namespace std;

    int main()
    {
        ifstream fin ("input.txt");
        ofstream fout ("output.txt");
        fin.tie(0);
        fin.sync_with_stdio(0);
        fout.tie(0);
        fout.sync_with_stdio(0);
        
        int n;
        fin >> n;

        vector<int> v(n);
        for(int &i:v)
        {
          fin>>i;
        }

        vector<int> dp(n,1);
        int longest = 1;
        for(int i = 1; i < n; i++)
        {
          for(int j = 0; j < i; j++)
          {
            if(v[i] % v[j]  == 0 || v[j] % v[i] == 0)
            {
              dp[i] = max(dp[i], dp[j]+1);
            }
          }

          longest = max(dp[i], longest);
        }
     
        fout << longest;
        
        return 0;
    }
3
6 2 4

Il tuo programma ritorna 3, ma 4%6 fa 4 e 6%4 fa 2, quindi la risposta giusta e’ 2 (prendendo 6 2 o 2 4).
hint: l’ordine degli elementi non conta

1 Mi Piace

Ah è vero non avevo capito che dovesse essere divisibile per tutte le coppie possibili di una sequenza. Ho pensato di lavorare con valori massimi di ogni sotto soluzione essendo che se un valore è divisibile per il massimo, o viceversa, lo è anche per tutti gli altri elementi, solo che non funzionerebbe salvando semplicemente in un array ogni volta… Dici che mi conviene andare in questa direzione o pensare a qualcos’altro?

hint1 in un subset c'è sempre un elemento minimo che divide tutti gli altri
hint2 sorta il vettore
hint3 sia dp[i] la cardinalità del subset che ha come minimo v[i]
1 Mi Piace

Effettivamente sortando si risolvono molti problemi nel calcolo della sequenza, grazie mille!

1 Mi Piace