Cod sursa(job #1232734)

Utilizator alex_HarryBabalau Alexandru alex_Harry Data 23 septembrie 2014 20:10:16
Problema Indep Scor 55
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.09 kb
#include <fstream>
using namespace std;
ifstream f("indep.in");
ofstream g("indep.out");
short N,Array[505];
short DP[505][1005][75];
void Read()
{
    short i;
    f>>N;
    for(i=1;i<=N;i++)
        f>>Array[i];
}

void add(short A[], short B[])
{
     short i, t = 0;
      for (i=1; i<=A[0] || i<=B[0] || t; i++, t/=10)
              A[i] = (t += A[i] + B[i]) % 10;
      A[0] = i - 1;
}
short CMMDC(short a,short b)
{
    short rest=a%b;
    while(rest!=0)
    {
        a=b;
        b=rest;
        rest=a%b;
    }
    return b;
}

void solveDinamic()
{
    short i,j;
    for(i=0;i<=N;i++)
        for(j=1;j<=1000;j++)
            DP[i][j][0]=1;
    DP[1][Array[1]][1]=1;
    for(i=1;i<=N;i++)
    {
        DP[i][Array[i]][1]=1;
        for(j=1;j<=1000;j++)
        {
            add(DP[i][j],DP[i-1][j]);
            add(DP[i][CMMDC(Array[i],j)],DP[i-1][j]);
        }
    }


}
void Print()
{
    short i;
    for(short i=DP[N][1][0];i>=1;i--)
        g<<DP[N][1][i];
}
int main()
{
    Read();
    solveDinamic();
    Print();
    return 0;
}