Cod sursa(job #961261)

Utilizator primulDarie Sergiu primul Data 11 iunie 2013 20:15:48
Problema Arbori Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.91 kb
#include <fstream>
using namespace std;
  
const int Nmax = 95;
const int Kmax = 15;
  
long long D[Nmax][Kmax][Nmax];
int N,M,K;
  
ifstream F("arbori.in");
ofstream G("arbori.out");
  
inline int Mod (int A)
{
    A = (A >= M || -A >= -M) ? A - M : A;
    A = (A >= M || -A >= -M) ? A % M : A;
    return ( A<0 ) ? A + M : A;
}
  
int main()
{
    F>>N>>M>>K;
    for (int i=0;i<=N;++i)
        D[1][0][i]=1;
    for (int i=2;i<=N;++i)
    {
        D[i][ Mod(i-1) ][1]=1;
        for (int k=2;k<=N;++k)
            for (int j=0;j < M;++j)
            {
                long long Sol=1;
                for (int l=0;l*k < i;++l)
                {
                    D[i][j][k] += Sol * D[i-l*k][Mod(j-l)][k-1];
                    Sol *= D[k][Mod(K - 1)][k - 1] + l;
                    Sol /= l + 1;
                }                  
            }
    }
    G<<D[N][K][N-1]<<'\n';
}