版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wingrez/article/details/88206255
计蒜客 A1634:划分整数
来源:计蒜客
标签:计数dp
参考资料:
相似题目:
题目
蒜头君特别喜欢数学。今天,蒜头君突发奇想:如果想要把一个正整数 n 分解成不多于 k 个正整数相加的形式,那么一共有多少种分解的方式呢?
蒜头君觉得这个问题实在是太难了,于是他想让你帮帮忙。
输入
共一行,包含两个整数n(1≤n≤300)和k(1≤k≤300),含义如题意所示。
输出
一个数字,代表所求的方案数。
输入样例
5 3
输出样例
5
解题思路
理解计数dp的思想。
参考代码
#include<cstdio>
#define MAXN 305
long long dp[MAXN][MAXN];
int n,k;
int main(){
scanf("%d%d",&n,&k);
for(int i=1;i<=n;i++){
for(int j=1;j<=k;j++){
if(i==1 || j==1) dp[i][j]=1;
else if(i<j) dp[i][j]=dp[i][i];
else if(i>j) dp[i][j]=dp[i-j][j]+dp[i][j-1];
else dp[i][j]=1+dp[i][j-1];
}
}
printf("%lld\n",dp[n][k]);
return 0;
}