【ybt】【基算 递推 课过 例3】数的划分
发布日期:2021-05-06 16:01:25 浏览次数:23 分类:技术文章

本文共 710 字,大约阅读时间需要 2 分钟。

数的划分

题目链接:


题目描述

在这里插入图片描述

在这里插入图片描述

解题思路

f i , j f_{

{i},{j}} fi,j 表示将 i i i 分成 j j j 份的情况数。
显然,当 i = j i=j i=j f ( i ) ( j ) f(i)(j) f(i)(j) 是只有一种情况的,也就是为 1 1 1
如果 j > i j>i j>i ,连 1 1 1 一份都不够,那么肯定是不合法的,为 0 0 0
考虑正常情况:

  • 如果我们在原序列的情况下在后面加一个 1 1 1 ,那么原总数则为 i − 1 i-1 i1 ,原份数为 j − 1 j-1 j1
  • 如果我们在原序列的基础上每个数加 1 1 1 ,那么原总数为 i − j i-j ij ,原份数为 j j j

那么递推式为:

f i , j = f i − 1 , j − 1 + f i − j , j f_{
{i},{j}}=f_{
{i-1},{j-1}}+f_{
{i-j},{j}}
fi,j=fi1,j1+fij,j

code

#include
#include
using namespace std;int n,m;int f[210][10];int main(){ cin>>n>>m; for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) { if(i==j) f[i][j]=1; else if(j>i) f[i][j]=0; else f[i][j]=f[i-1][j-1]+f[i-j][j]; } cout<
上一篇:【ybt】【基算 递推 课过 例4】传球游戏
下一篇:【ybt】【基算 递推 课过 例2】奇怪汉诺塔

发表评论

最新留言

路过按个爪印,很不错,赞一个!
[***.219.124.196]2025年04月17日 10时10分57秒