Pagini recente » Cod sursa (job #2787931) | Cod sursa (job #2440390) | Cod sursa (job #980119) | Cod sursa (job #930226) | Cod sursa (job #137926)
Cod sursa(job #137926)
#include <cstdio>
#include <vector>
#include <iostream>
using namespace std;
int N, M, K;
long long A[100];
vector <int> p;
void partition(const int &N, int s, int K)
{
if(s==N-1)
{
if((int)p.size() % M == K)
{
long long value=1;
for(size_t i=0; i<p.size() && value; ++i)
value*=A[p[i]];
A[N]+=value;
}
return;
}
if(p.empty())
p.push_back(1);
else
p.push_back(p.back());
for(; s+p.back()<=N-1; ++p[p.size()-1])
partition(N, s+p.back(), K);
p.pop_back();
}
void solve()
{
A[1]=1;
for(int i=2; i<N; ++i)
{
A[i]=0;
partition(i, 0, (K-1+M)%M);
}
A[N]=0;
partition(N, 0, K);
}
int main()
{
freopen("arbori.in", "r", stdin);
freopen("arbori.out", "w", stdout);
scanf("%d %d %d", &N, &M, &K);
if(N>10)
return 1;
solve();
printf("%Ld\n", A[N]);
return 0;
}