题意:输入一个n 给出其所有组合数
如:
4 = 4;
4 = 3 + 1;
4 = 2 + 2;
4 = 2 + 1 + 1;
4 = 1 + 1 + 1 + 1;
重复不算
母函数入门题:
#include<iostream> #include<queue> #include<cstdio> #include<cstring> #include<vector> #include<map> #include<algorithm> using namespace std; #define N 505 #define inf 0x3f3f3f3f int c1[N]; //ans int c2[N]; //中间变量 int main() { int n; while(scanf("%d",&n)==1) { for(int i=0;i<=n;i++) { c1[i]=1; c2[i]=0; } for(int i=2;i<=n;i++)//i为第几个多项式 因为第一个多项式在上面已经初始化好了 接下来要做的是按照顺序将第i个多项式 与c1乘好 { for(int j=0;j<=n;j++)//c1数组的指数大小 for(int k=0;j+k<=n;k+=i)//第i个多项式的各个指数值 这两个循环就是多项式乘法 时间:n*n c2[j+k]+=c1[j]; for(int i=0;i<=n;i++) { c1[i]=c2[i]; c2[i]=0; } } printf("%d\n",c1[n]); } return 0; }