问题描述 :

  有 n 个无区别的物品 , 将他们分成 不超过 m 堆, 问有多少种分法 ?  

例如 :

  n = 4 , m = 3 , 则总共有的分法是 1 + 2 +1 , 0 + 1 + 3 , 0 + 2 + 2 , 0 + 0 +  4 。

  共有 4 种分法 ,观察这四种分法 , 有一个特点 , 即 带 0 的划分 和不带 0 的划分 ,首先不带 0 的划分 , 比如 1 + 2 + 1 就可以视为是 0 + 1 + 0 的划分数递推加 1 得到的 , 带 0 的划分就可以视为是 将 n 分为 m - 1 份所得到的划分数 。

代码示例 :

int n, m;
int dp[100][100]; int main() {
//freopen("in.txt", "r", stdin);
//freopen("out.txt", "w", stdout); cin >> n >> m;
dp[0][0] = 1;
for(int i = 1; i <= m; i++) dp[0][i] = 1; for(int i = 1; i <= n; i++){
for(int j = 1; j <= m; j++){
if (i >= j) dp[i][j] = dp[i-j][j]+dp[i][j-1];
else dp[i][j] = dp[i][j-1];
}
}
cout << dp[n][m] << endl;
return 0;
}

将数字 n 分成不超过 m 份的方案数

dp[i][j] 表示将数字 i 分成 j 份的方案数,转移的话分为两种,

第一种是 假设其中有某一堆的个数为 1 , 则可以有 dp[i-1][j-1] 推来

第二种是 假设其中所有堆的个数都大于等于 2, 则可以由 dp[i-j][j] 推来

int n, m;
int dp[205][100]; int main() {
//freopen("in.txt", "r", stdin);
//freopen("out.txt", "w", stdout); cin >> n >> m;
dp[0][0] = 1; for(int i = 1; i <= n; i++){
for(int j = 1; j <= m; j++){
if (i >= j) dp[i][j] = dp[i-j][j]+dp[i-1][j-1];
}
}
cout << dp[n][m] << endl;
return 0;
}

dp-划分数 (递推)的更多相关文章

  1. [AHOI2009]中国象棋 DP,递推,组合数

    DP,递推,组合数 其实相当于就是一个递推推式子,然后要用到一点组合数的知识 一道很妙的题,因为不能互相攻击,所以任意行列不能有超过两个炮 首先令f[i][j][k]代表前i行,有j列为一个炮,有k列 ...

  2. UVa 926【简单dp,递推】

    UVa 926 题意:给定N*N的街道图和起始点,有些街道不能走,问从起点到终点有多少种走法. 很基础的dp.递推,但是有两个地方需要注意,在标记当前点某个方向不能走时,也要同时标记对应方向上的对应点 ...

  3. HDU 5965 三维dp 或 递推

    题意:= =中文题 思路一:比赛时队友想的...然后我赛后想了一下想了个2维dp,但是在转移的时候,貌似出了点小问题...吧?然后就按照队友的思路又写了一遍. 定义dp[i][j][k],表示第i列, ...

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

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

  5. 【BZOJ4944】【NOI2017】泳池 概率DP 常系数线性递推 特征多项式 多项式取模

    题目大意 有一个\(1001\times n\)的的网格,每个格子有\(q\)的概率是安全的,\(1-q\)的概率是危险的. 定义一个矩形是合法的当且仅当: 这个矩形中每个格子都是安全的 必须紧贴网格 ...

  6. [NOI2017]泳池——概率DP+线性递推

    [NOI2017]泳池 实在没有思路啊~~~ luogu题解 1.差分,转化成至多k的概率减去至多k-1的概率.这样就不用记录“有没有出现k”这个信息了 2.n是1e9,感觉要递推然后利用数列的加速技 ...

  7. lightoj 1126 - Building Twin Towers(dp,递推)

    题目链接:http://www.lightoj.com/volume_showproblem.php?problem=1126 题解:一道基础的dp就是简单的递推可以设dp[height_left][ ...

  8. BZOJ5017 [Snoi2017]炸弹[线段树优化建边+scc缩点+DAG上DP/线性递推]

    方法一: 朴素思路:果断建图,每次二分出一个区间然后要向这个区间每个点连有向边,然后一个环的话是可以互相引爆的,缩点之后就是一个DAG,求每个点出发有多少可达点. 然后注意两个问题: 上述建边显然$n ...

  9. UVa 825【简单dp,递推】

    UVa 825 题意:给定一个网格图(街道图),其中有一些交叉路口点不能走.问从西北角走到东南角最短走法有多少种.(好像没看到给数据范围...) 简单的递推吧,当然也就是最简单的动归了.显然最短路长度 ...

  10. codeforces 696C PLEASE 概率dp+公式递推+费马小定理

    题意:有3个杯子,排放一行,刚开始钥匙在中间的杯子,每次操作,将左右两边任意一个杯子进行交换,问n次操作后钥匙在中间杯子的概率 分析:考虑动态规划做法,dp[i]代表i次操作后的,钥匙在中间的概率,由 ...

随机推荐

  1. H3C OSPF协议分区域管理

  2. 慎用curl测网站速度

    curl的计时功能也许不够准确. curl -s -o /dev/null -w %{time_total} g.cn 耗时(秒) 0.1350.1340.1350.1350.1340.132 ab ...

  3. 2019-8-30-C#-反射调用私有事件

    title author date CreateTime categories C# 反射调用私有事件 lindexi 2019-08-30 08:52:57 +0800 2018-09-19 20: ...

  4. Java中try catch finally执行

    直接上代码实例: public static void main(String[] args) {    System.out.println(test1()); } static int test1 ...

  5. 算法提高 密码锁 (BFS)

    问题描述 你获得了一个据说是古代玛雅人制作的箱子.你非常想打开箱子看看里面有什么东西,但是不幸的是,正如所有故事里一样,神秘的箱子出现的时候总是会挂着神秘的锁. 这个锁上面看起来有  N  个数字,它 ...

  6. 【t081】序列长度(贪心做法)

    Time Limit: 1 second Memory Limit: 128 MB [问题描述] 有一个整数序列,我们不知道她的长度是多少(即序列中整数的个数),但我们知道在某些区间中至少有多少个整数 ...

  7. 递归&时间模块&os模块

    递归 递归调用 一个函数,调用了自身,称为递归调用 递归函数:一个会调用自身的函数称为递归函数 凡是循环能干的事,递归都能干 方式: 写出临界条件 找这一次和上一次的关系 假设当前函数已经能用,调用自 ...

  8. 深度解读 - Windows 7核心图形架构细致分析(来自微软)

    编辑:马志文 时间: 2009-12-29 如现在大家所想的那样, Windows7 其实是 Windows Vista 的改进版. Windows 7 在 Windows Vista 的基础上进行了 ...

  9. string的常见操作

    访问 遍历 不需修改:for(auto c : s)   需要修改:for(auto &c : s)​ for(decltype(s.size()) i = 0; i < s.size( ...

  10. 北京联通盒子-数码视讯Q7-破解

    准备: 1.数码视讯Q7盒子 2.电焊笔  细电线4跟不同色(可以直接用废旧USB的线) 3.TTL 转 USB线 ,型号: CH340g(自行淘宝购买) 4.安装TTL线的驱动到电脑上(找淘宝商家要 ...