Cod sursa(job #3154708)

Utilizator catalinmarincatalinmarin catalinmarin Data 5 octombrie 2023 18:03:09
Problema Indep Scor 5
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.24 kb
#include <fstream>
#include <vector>
using namespace std;
ifstream cin("indep.in");
ofstream cout("indep.out");
short euclid(short a, short b){
    if (b == 0)
        return a;
    short rezultat = euclid(b, a % b);
    return rezultat;
}
short cmmdc[1001][1001] = {0};
int main(){
    for (int i = 1; i <= 1000; i++){
        for (int j = 1; j <= 1000; j++){
            if (cmmdc[i][j] != 0){
                continue;
            } else {
                cmmdc[i][j] = euclid(i, j);
                cmmdc[j][i] = cmmdc[i][j];
            }
        }
    }
    short lungime;
    short max_nr[501] = {0};
    short v[1001] = {0};
    int dp[501][1001] = {0};
    cin >> lungime;
    for (int i = 1; i <= lungime; i++){
        cin >> v[i];
        max_nr[i] = max(max_nr[i - 1], v[i]);
    }
    for (short i = 1; i <= lungime; i++){
        for (short j = 1; j <= max_nr[i]; j++){
            dp[i][j] += dp[i-1][j];
            if (j == v[i])
                dp[i][j] += 1;
            else {
                for (short k = 1; k <= max_nr[i]; k++) {
                    if (cmmdc[k][v[i]] == j) {
                        dp[i][j] += dp[i - 1][k];
                    }
                }
            }
        }
    }
    cout << dp[lungime][1];
    return 0;
}