C

.

3

C. 【例题3】数的划分

C.【例题3】数的划分

题目描述

将整数

n

n

n 分成

k

k

k 份,且每份不能为空,任意两个方案不相同(不考虑顺序)。

例如:

n

=

7

n=7

n=7,

k

=

3

k=3

k=3,下面三种分法被认为是相同的:

1

,

1

,

5

;

1

,

5

,

1

;

1

,

1

,

5.

1,1,5;~~~~1,5,1;~~~~1,1,5.

1,1,5;    1,5,1;    1,1,5.

问有多少种不同的分法。


输入格式

两个整数,

n

n

n和

k

k

k 。


输出格式

输出不同的分法数。


样例

输入样例

7

3

7 ~~~3

7   3

输出样例

4

4

4

样例说明

四种分法为:

1

,

1

,

5

;

1

,

2

,

4

;

1

,

3

,

3

;

2

,

2

,

3.

1,1,5;~~~~ 1,2,4; ~~~~1,3,3;~~~~ 2,2,3.

1,1,5;    1,2,4;    1,3,3;    2,2,3.


题目解析

看题面,首先想到递推.

t

(

n

,

k

)

t(n,k)为

t(n,k)为整数

n

n

n分为

k

k

k份的不同分法的数量.
因为不能为空,那么最小就只能分到

1

1

1.
那么我们就可以得出:

t

(

n

,

k

)

=

1

(

n

=

=

k

)

t(n,k)=1~~~(n==k)~~~~~~~~~~~~

t(n,k)=1   (n==k)            (因为每份最多都是

1

1

1)

t

(

n

,

k

)

=

0

(

n

<

k

)

t(n,k)=0~~~(n<k)~~~~~~~~~~~~~~~

t(n,k)=0   (n<k)               (因为就算每份都只放

1

1

1也不够放,而且都不能为空)

然后我们考虑两种情况

  1. 有一份是装有

    1

    1

    1的:那么就有

    t

    (

    n

    1

    ,

    k

    1

    )

    t(n-1,k-1)

    t(n−1,k−1)种情况

  2. 没有一份是装有

    1

    1

    1的:那么就有

    t

    (

    n

    k

    ,

    k

    )

    t(n-k,k)

    t(n−k,k)种情况

那么就能得出递推式:

t

(

n

,

k

)

=

{

t

(

n

,

k

)

=

1

(

n

=

=

k

)

t

(

n

,

k

)

=

0

(

n

<

k

)

t

(

n

,

k

)

=

t

(

n

1

,

k

1

)

+

t

(

n

k

,

k

)

t(n,k) = \left\{\begin{matrix} & t(n,k)=1~~~~~~~~~~~~~(n==k)\\ & t(n,k)=0~~~~~~~~~~~~~~~~(n<k)\\ & t(n,k)=t(n-1,k-1)+t(n-k,k)\\ \end{matrix}\right.

t(n,k)=⎩⎨⎧​​t(n,k)=1             (n==k)t(n,k)=0                (n<k)t(n,k)=t(n−1,k−1)+t(n−k,k)​


Code

#include <bits/stdc++.h>
using namespace std; int n, k, t[205][10]; int main ()
{
scanf ("%d%d", &n, &k);
memset (t, 0, sizeof (t));
for (int i = 1; i <= n; ++ i)
{
for (int j = 1; j <= k; ++ j)
{
if (i == j) t[i][j] = 1; //每个都分1
else if (i < j) t[i][j] = 0; //每个都分1也不够
else t[i][j] = t[i - 1][j - 1]/*至少有一个份为1的方案数*/ + t[i - j][j]/*当没有任何一份为1时的方案数*/;
}
}
printf ("%d", t[n][k]);
return 0;
}

[递推]C. 【例题3】数的划分的更多相关文章

  1. 【递推】【卡特兰数】CODEVS 3134 Circle

    新GET了一种卡特兰数的应用…… 在一个圆上,有2*K个不同的结点,我们以这些点为端点,连K条线段,使得每个结点都恰好用一次.在满足这些线段将圆分成最少部分的前提下,请计算有多少种连线的方法. 不会证 ...

  2. LightOJ - 1038 Race to 1 Again 递推+期望

    题目大意:给出一个数,要求你按一定的规则将这个数变成1 规则例如以下,如果该数为D,要求你在[1,D]之间选出D的因子.用D除上这个因子,然后继续按该规则运算.直到该数变成1 问变成1的期望步数是多少 ...

  3. 大概是:整数划分||DP||母函数||递推

    整数划分问题 整数划分是一个经典的问题. Input 每组输入是两个整数n和k.(1 <= n <= 50, 1 <= k <= n) Output 对于每组输入,请输出六行. ...

  4. [luogu]P1066 2^k进制数[数学][递推][高精度]

    [luogu]P1066 2^k进制数 题目描述 设r是个2^k 进制数,并满足以下条件: (1)r至少是个2位的2^k 进制数. (2)作为2^k 进制数,除最后一位外,r的每一位严格小于它右边相邻 ...

  5. [递推]D. 【例题4】传球游戏

    D . [ 例 题 4 ] 传 球 游 戏 D. [例题4]传球游戏 D.[例题4]传球游戏 题目解析 设 t ( i , j ) t(i,j) t(i,j)为过了 j j j轮,轮到 i i i手上 ...

  6. BZOJ-1002 轮状病毒 高精度加减+Kirchhoff矩阵数定理+递推

    1002: [FJOI2007]轮状病毒 Time Limit: 1 Sec Memory Limit: 162 MB Submit: 3543 Solved: 1953 [Submit][Statu ...

  7. 【递推】BZOJ 3930: [CQOI2015]选数

    Description 我们知道,从区间[L,H](L和H为整数)中选取N个整数,总共有(H-L+1)^N种方案.小z很好奇这样选出的数的最大公约数的规律,他决定对每种方案选出的N个整数都求一次最大公 ...

  8. CODE[VS]-数的计算-递推-天梯白银

    题目描述 Description 我们要求找出具有下列性质数的个数(包含输入的自然数n): 先输入一个自然数n(n<=1000),然后对此自然数按照如下方法进行处理: 1.不作任何处理; 2.在 ...

  9. 洛谷 P1028 数的计算【递推】

    P1028 数的计算 题目描述 我们要求找出具有下列性质数的个数(包含输入的自然数n): 先输入一个自然数n(n<=1000),然后对此自然数按照如下方法进行处理: 1.不作任何处理; 2.在它 ...

随机推荐

  1. macOS & timer & stop watch

    macOS & timer & stop watch https://matthewpalmer.net/blog/2018/09/28/top-free-countdown-time ...

  2. flutter 插件调用callback函数

    dart plugin class TestLib { static MethodChannel _channel = const MethodChannel('test_lib') ..setMet ...

  3. 蓝桥杯——试题 算法训练 Yaroslav and Algorithm

    试题 算法训练 Yaroslav and Algorithm 资源限制 时间限制:100ms 内存限制:128.0MB 问题描述 (这道题的数据和SPJ已完工,尽情来虐吧!) Yaroslav喜欢算法 ...

  4. 【Python】面向对象:类与继承简单示例

    Python 面向对象 Python 是一门面向对象的设计语言,与此对应的就是面向过程编程与函数式编程 面向对象的一个优点就是更好的增强代码的重用性. 面向过程编程可以简单的理解为:重点在步骤,将一个 ...

  5. 图片居中的flex实现

    文本居中 text-align:center; 如果是图片放在div中,就没办法了.用flex可以很简单实现. display: flex; justify-content: center; /* 图 ...

  6. java自学第5期——Object、Date、Calender、System、StringBuilder、基本类型包装类

    一.Object类 作用:对象操作 位置:java.lang.Object 方法: public String toString() :返回对象的字符串表示形式. public boolean equ ...

  7. 敏捷史话(七):从程序员、作家到摇滚乐手——Andy Hunt的多面人生

    与其说 Andy Hunt 是敏捷宣言的创始人,不如说他是一名专业作家来得更为合适.他的<实用程序员><程序员修炼之道:从小工到专家><编程 Ruby:实用程序员指南&g ...

  8. 1.代码规范之 if 语句编写

    最近在看项目代码的时候, 看到需要判断的地方,出现了if的多重嵌套,  甚至是出现了十几层的嵌套, 代码的阅读性非常之差. 简单的举个例子(这里只是两层的嵌套): public class demo ...

  9. 【Notes】现代图形学入门_01

    跟着闫令琪老师的课程学习,总结自己学习到的知识点 课程网址GAMES101 B站课程地址GAMES101 课程资料百度网盘[提取码:0000] 计算机图形学概述 计算机图形学是一门将模型转化到屏幕上图 ...

  10. LinkedHashMap转对象

    当需要把map转为实体对象时,需要结合fastjson来实现,方法如下: LinkedHashMap<String,Object> hashMap = new LinkedHashMap& ...