【问题描述】 将整数n分成k份,且每份不能为空,任意两份不能相同(不考虑顺序). 例如:n=7,k=3,下面三种分法被认为是相同的。 1,1,5; 1,5,1; 5,1,1; 问有多少种不同的分法。 【输入文件】 n,k (6<n≤200,2≤k≤6) 【输出文件】 一个整数,即不同的分法。 样例输入 7 3 样例输出 4 题解:第一眼dfs,发现DP也行。 f[i][j]表示数i化成j分的方案数#include<cstdio> #include<cstdlib> #include<cstring> #include<algorithm> #include<iostream> using namespace std; int n,m; int f[300][300]; int main() { scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) { for(int j=1;j<=i;j++) { f[i][j]=f[i-1][j-1]+f[i-j][j]; if(i==1&&j==1) f[i][j]=1; } } printf("%d",f[n][m]); }
[NOIP提高组2001]数的划分
最新推荐文章于 2023-11-18 10:07:59 发布