对于一个正整数n的划分,就是把n变成一系列正整数之和的表达式。注意,分划与顺序无关,例如6=5+1跟6=1+5是
同一种分划。另外,单独这个整数本身也算一种分划。
例如:对于正整数n=5,可以划分为:
1+1+1+1+1
1+1+1+2
1+1+3
1+2+2
2+3
1+4
5
输入描述
输入一个正整数n
输出描述
输出n整数划分的总数k
输入样例
5
dp[i][j]: 用小于等于 j 的数去表示 i
初始化:dp[1.2.3…][1]= 1; 即用 1 来表示其他的数;
dp[1][1.2.3…] = 1; 用小于等于’后边的数’来表示 1 ,只有 1 种
我感觉是递推…
#include <stdio.h>
int dp[100][100];
int main(){
int n;
scanf("%d", &n);
for(int i=0; i<=n; i++){
dp[0][i] = 1;//f(n,n)的情况
}
for(int i=1; i<=n; i++){
for(int j=0; j<=n; j++){
if(j>i) dp[i][j] = dp[i][i];
else{
dp[i][j] = dp[i-j][j] + dp[i][j-1];
}
}
}
printf("%d\n", dp[n][n]);
return 0;
}