码迷,mamicode.com
首页 > 其他好文 > 详细

CodeVS1039 数的划分 插图题解!

时间:2017-04-25 21:25:38      阅读:189      评论:0      收藏:0      [点我收藏+]

标签:int   个数   scan   code   preview   不能   实现   顺序   amp   

题目

题目描述

将整数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 数的划分 插图题解!

标签:int   个数   scan   code   preview   不能   实现   顺序   amp   

原文地址:http://www.cnblogs.com/yhyl/p/6764052.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!