求解整数拆分问题:
#include <stdio.h>
#include <string.h>
#define MAXN 500
/*
2.求解整数拆分问题:求将正整数n无序拆分成最大数为k(称为n的k拆分)的拆分方案个数,
要求所有的拆分方案不重复。用备忘录递归(自上而下)求解。
*/
int dp[MAXN][MAXN];
int dpf(int n,int k)
{
if(dp[n][k]!=0)
{
return dp[n][k];
}
if(n==1 || k==1)
{
return dp[n][k]=1;
}
else if(n<k)
{
return dp[n][k]=dpf(n,n);
}
else if(n==k)
{
return dp[n][k]=dpf(n,k-1)+1;
}
else//i>k
{
return dp[n][k]=dpf(n,k-1)+dpf(n-k,k);
}
}
int main()
{
int n,k;
printf("请输入N和k:");
scanf("%d %d",&n,&k);
memset(dp,0,sizeof(dp)); //初始化为0
printf("dpn(%d,%d)=%d种\n",n,k,dpf(n,k));
}