[递推]C. 【例题3】数的划分
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的:那么就有
t
(
n
−
1
,
k
−
1
)
t(n-1,k-1)
t(n−1,k−1)种情况
- 没有一份是装有
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】数的划分的更多相关文章
- 【递推】【卡特兰数】CODEVS 3134 Circle
新GET了一种卡特兰数的应用…… 在一个圆上,有2*K个不同的结点,我们以这些点为端点,连K条线段,使得每个结点都恰好用一次.在满足这些线段将圆分成最少部分的前提下,请计算有多少种连线的方法. 不会证 ...
- LightOJ - 1038 Race to 1 Again 递推+期望
题目大意:给出一个数,要求你按一定的规则将这个数变成1 规则例如以下,如果该数为D,要求你在[1,D]之间选出D的因子.用D除上这个因子,然后继续按该规则运算.直到该数变成1 问变成1的期望步数是多少 ...
- 大概是:整数划分||DP||母函数||递推
整数划分问题 整数划分是一个经典的问题. Input 每组输入是两个整数n和k.(1 <= n <= 50, 1 <= k <= n) Output 对于每组输入,请输出六行. ...
- [luogu]P1066 2^k进制数[数学][递推][高精度]
[luogu]P1066 2^k进制数 题目描述 设r是个2^k 进制数,并满足以下条件: (1)r至少是个2位的2^k 进制数. (2)作为2^k 进制数,除最后一位外,r的每一位严格小于它右边相邻 ...
- [递推]D. 【例题4】传球游戏
D . [ 例 题 4 ] 传 球 游 戏 D. [例题4]传球游戏 D.[例题4]传球游戏 题目解析 设 t ( i , j ) t(i,j) t(i,j)为过了 j j j轮,轮到 i i i手上 ...
- BZOJ-1002 轮状病毒 高精度加减+Kirchhoff矩阵数定理+递推
1002: [FJOI2007]轮状病毒 Time Limit: 1 Sec Memory Limit: 162 MB Submit: 3543 Solved: 1953 [Submit][Statu ...
- 【递推】BZOJ 3930: [CQOI2015]选数
Description 我们知道,从区间[L,H](L和H为整数)中选取N个整数,总共有(H-L+1)^N种方案.小z很好奇这样选出的数的最大公约数的规律,他决定对每种方案选出的N个整数都求一次最大公 ...
- CODE[VS]-数的计算-递推-天梯白银
题目描述 Description 我们要求找出具有下列性质数的个数(包含输入的自然数n): 先输入一个自然数n(n<=1000),然后对此自然数按照如下方法进行处理: 1.不作任何处理; 2.在 ...
- 洛谷 P1028 数的计算【递推】
P1028 数的计算 题目描述 我们要求找出具有下列性质数的个数(包含输入的自然数n): 先输入一个自然数n(n<=1000),然后对此自然数按照如下方法进行处理: 1.不作任何处理; 2.在它 ...
随机推荐
- flutter 混合开发
flutter 混合开发 https://github.com/flutter/flutter/wiki/Add-Flutter-to-existing-apps https://flutter.de ...
- CSS Shapes
CSS Shapes shape-outside & shape-image-threshold <img class="element" src="ima ...
- select notes mark
select notes mark mark-line https://time.geekbang.org/column/article/224545
- qt QTimer 计时器
#include <QtCore> #include <QTimer> QTimer *timer; timer = new QTimer(this); connect(tim ...
- Redis 博文索引
博文索引 Redis 对象与编码 Redis 持久化 Redis 主从复制 Redis 哨兵 Redis 缓存淘汰 Redis 集合统计 Redis 简介
- Python 爬虫使用动态切换ip防止封杀
对于爬虫被封禁 ! 爬虫一般来说只要你的ip够多,是不容易被封的. 一些中小网站要封杀你,他的技术成本也是很高的,因为大多数网站没有vps,他们用的是虚拟空间或者是sae,bae这样的paas云. 其 ...
- MVVM中的vm双向监听和mvc的缺点
`MVVM`模型: - 即Model,模型,包括数据和一些基本操作 - 即View,视图,页面渲染结果- 即View-Model,模型与视图间的双向操作(无需开发人员干涉) `MVVM`中的`VM`要 ...
- Vue学习笔记-django-cors-headers安装解决跨域问题
一 使用环境: windows 7 64位操作系统 二 jango-cors-headers安装解决跨域问题(后端解决方案) 跨域,指的是浏览器不能执行其他网站的脚本.它是由浏览器的同源策略造成的 ...
- Bitter.NotifyOpenPaltform : HTTP 异步消息接收调度中心--开源贡献 之 一:简介
现在互联网的系统越来越趋向于复杂,从单体系统到现在的微服务体系演变.公司与公司的分工也越来越明确. 大数据公司提供了大数据服务 人脸识别公司提供了人脸识别服务 OCR 公司提供了专业的OCR 服务 车 ...
- 一文读懂什么是kubernetes?
kubernetes概述 kubernetes面世不过短短几年时间,kuberenetes已经成为容器编排领域事实上的标准,无论是公有云,私有云或混合云,kubernetes都将作为一个为任何应用,任 ...