2117: 数的划分
Time Limit: 1 Sec Memory Limit: 128 MB
Submit: 68 Solved: 27
[Submit][Status][Web Board]
Description
一个正整数可以划分为多个正整数的和,比如n=3时:
3;1+2;1+1+1;
共有三种划分方法。
给出一个正整数,问有多少种划分方法。
Input
一个正整数n,n<=100
Output
一个正整数,表示划分方案数
Sample Input
3
Sample Output
3
HINT
Source
解析:母函数,之前写过母函数的博客,这是个对一些组合和拆分题很有用处
也可以用dp写 dp对于我来说一直是硬伤
代码:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<cstdlib>
#include<algorithm>
#include<vector>
#include<set>
#include<map>
#include<stack>
#include<list>
using namespace std;
typedef long long ll;
const int maxn=120+5;
int c1[maxn],c2[maxn];
int main()
{
int n;
while(~scanf("%d",&n))
{
for(int i=0; i<=n; i++)
{
c1[i]=1;
c2[i]=0;
}
for(int i=2; i<=n; i++)
{
for(int j=0; j<=n; j++)
{
for(int k=0; k+j<=n; k+=i)//重点
{
c2[j+k]+=c1[j];
}
}
for(int j=0; j<=n; j++)
{
c1[j]=c2[j];
c2[j]=0;
}
}
printf("%d\n",c1[n]);
}
return 0;
}