CodeVS1039 数的划分 插图题解!

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CodeVS1039 数的划分 插图题解!相关的知识,希望对你有一定的参考价值。

题目

题目描述

将整数n分成k份,且每份不能为空,任意两种划分方案不能相同(不考虑顺序)。 
例如:n=7,k=3,下面三种划分方案被认为是相同的。 
1 1 5 
1 5 1 
5 1 1 
问有多少种不同的分法。

输入描述

输入:n,k (6

输出描述

输出:一个整数,即不同的分法。

样例输入

7 3

样例输出

4

 

题解!

我们用dp[i][j]表示把数字i分成j份的方案数,那么: 
1. i < j 时,不存在方案,dp[i][j]=0
2. i >= j 时,考虑: 
    1) 当前方案存在“1”这个数时,可以“裁去”这个1,从而实现 j 的减少。 
技术分享 
    2) 当前方案不存在“1”这个数时,j减少不了,但是仍可以“裁去”最底下的“一层”,即所有数减去1,总数i减去j,实现 i 的减少。 
技术分享

所以: 

 

 dp[i][j]=dp[i-1][j-1]+dp[i-j][j];(j<=i)

 

代码:

 1 #include <cstdio>
 2 using namespace std;
 3 int N, K, dp[205][8];
 4 int main(){
 5 scanf("%d%d", &N, &K);
 6 dp[0][0] = 1;
 7 for(int i = 0; i <= N; i++)
 8 for(int j = 1; j <= K && j <= i; j++)
 9 dp[i][j] = dp[i-1][j-1] + dp[i-j][j];
10 printf("%d\n", dp[N][K]);
11 return 0;
12 }

 

以上是关于CodeVS1039 数的划分 插图题解!的主要内容,如果未能解决你的问题,请参考以下文章

codevs 1039:数的划分

codevs 1039 数的划分

codevs 1039 数的划分 x

luoguP1025+codevs 1039 数的划分 x

CodeVS 1039-数的划分

dp练习——数的划分