1185. 数的划分问题一 (Standard IO)
时间限制:
1000 ms 空间限制: 262144 KB 具体限制
题目描述
把正整数N分解成M个正整数的和,即使M个数相同但顺序不同也认为是不同的方案,要求总方案数。如3=1+2跟3=2+1是两个不同的方案。
输入
第一行包含两个整数N和M(1<=M<=N<=50)。
输出
输出一个数表示方案数。
样例输入
3 2
样例输出
2
数据范围限制
1<=M<=N<=50
分析:用递归做TLE,用动态规划做,dp[i][j]表示
把整数i划分为j个数的方案数,则dp[i][j]=∑dp[k][j-1],0<k<i,
记得初始化。
#include<cstdio> long long dp[60][70]; int main() { int N,M,ans; scanf("%d%d",&N,&M); for(int i=1;i<=N;i++) dp[i][1]=1;//初始化 for(int i=2;i<=N;i++) { for(int j=1;j<=M;j++) for(int k=1;k<i;k++) dp[i][j]+=dp[k][j-1]; } printf("%lld\n",dp[N][M]); return 0; }