1 条题解
-
0
C :
#include <stdio.h> #include <stdlib.h> unsigned long long A[50]; int N; unsigned long long Cij(int i, int j){ unsigned long long ans = 1; for(unsigned long long k = 1;k <= j; k++){ ans = ans * (i-j+k)/k; } return ans; } unsigned long long DFS(int last, int layer, int ob){ unsigned long long ans = 0; if(ob == layer){ if(N>last)return 0; unsigned long long a = Cij(last,N); ans += a; return ans; } for(int i = 1;i < N; i++){ if(i<=last){ N -= i; if(layer>1){ ans += Cij(last,i)*DFS(i,layer+1,ob); } else ans += DFS(i,layer+1,ob); N += i; } } return ans; } int main() { while(scanf("%d",&N) != EOF) { for(int i = 1;i <= N; i++)A[i]=DFS(N,1,i); unsigned long long ans = 0; for(int i = 1;i <= N; i++)ans += A[i]; printf("%lld\n",ans); for(int i = 1;i <= N; i++)printf("%lld\n",A[i]); } return 0; }
- 1
信息
- ID
- 1435
- 时间
- 1000ms
- 内存
- 512MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者