n的m划分

  • 将n划分成若干个不超过m的数(正整数)的和,问有几种划分情况。

现在根据n和m的关系,考虑下面几种情况:

  1. 当n=1时,不论m的值为多少,只有一种划分,即{1};
  2. 当m=1时,不论n的值为多少,只有一种划分,即{1,1,1,....1,1,1}划分成n个1;
  3. 当n==m时,(a)划分中不包含n的情况,即n的n-1的划分f(n,n-1);(b)其他情况就是包含n的划分,只有1个,即{n};
  4. 当n>=m时,(a)划分中不包含m的情况,即n的n-1划分f(n,m-1);(b)其他情况就是包含m的划分,即{x1,x2,x3,x4,...,xi,m},也就是n-m的m划分f(n-m,m);
  5. 当n<m时,因为划分不会出现负数,因此也就是n的n划分。

综上的递推表达式为:

for(int i=1; i<=n; i++){for(int j=1; j<=i; j++){if(i==1||j==1) dp[i][j]=1;else{if(j==i) dp[i][j]=dp[i][j-1]+1;else if((i-j)<j)dp[i][j]=dp[i-j][i-j]+dp[i][j-1];elsedp[i][j]=dp[i-j][j]+dp[i][j-1];}}}

  • 将n划分成不超过m个数(正整数)的和,问有几种情况。

dp[i][j]表示j的i划分。

考虑n的m划分,如果对于每一个i都有xi>0,那么{xi-1}就对应了n-m的m划分。另外如果存在xi=0,那么就对应了n的m-1划分。

综上所述,对推关系:

dp[i][j]=dp[i][j-i]+dp[i-1][j]

dp[0][0]=1;for(int i=1;i<=m;i++){for(int j=0;j<=n;j++){if((j-i)>=0) dp[i][j]=(dp[i-1][j]+dp[i][j-i])%mod;else dp[i][j]=dp[i-1][j];}}

转载于:https://www.cnblogs.com/GeekZRF/p/7128283.html

n的m划分 整数拆分问题相关推荐

  1. 整数拆分问题的四种解法

    整数划分问题是算法中的一个经典命题之一 所谓整数划分,是指把一个正整数n写成如下形式: n=m1+m2+m3+....+mi;(其中mi为正整数,并且1<=mi<=n),则{m1,m2,m ...

  2. python整数拆分dp算法_整数拆分问题的四种解法【转载】

    http://blog.csdn.net/u011889952/article/details/44813593 整数拆分问题的四种解法 原创 2015年04月01日 21:17:09 整数划分问题是 ...

  3. 整数拆分的两种解法(已完成)

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 整数拆分 ...

  4. 知识点 - 分拆数/整数拆分

    知识点 - 分拆数/整数拆分 解决问题类型: 将一个数用一个或多个正整数的无序和来表示有几种方案. 这是一个母函数的应用,利用了母函数的指数系数是五边形数来优化复杂度. 结论 (1)称正整数n分解为r ...

  5. python 整数 拆分 分段

    整数 拆分 分段 不平均分 int1 = 68 # 整数 sub = 3 # 要分成几段 interval = int1 // sub rem = int1 % sub print("余数: ...

  6. LeetCode-动态规划基础题-343. 整数拆分

    描述 343. 整数拆分 给定一个正整数 n,将其拆分为至少两个正整数的和,并使这些整数的乘积最大化. 返回你可以获得的最大乘积. 示例 1: 输入: 2 输出: 1 解释: 2 = 1 + 1, 1 ...

  7. python分割数字_python实现整数拆分,输出拆分序列

    昨天笔试VIPKID有一道关于整数拆分的题目,要求输出拆分后的序列,当时没有做出来,记录一下可以实现的想法: 题目示例: 从键盘读入一个数 n, 输出所有和为 n 的子序列和,包括 n 测试用例: 输 ...

  8. leetcode 343. Integer Break | 343. 整数拆分(Java)

    题目 https://leetcode.com/problems/integer-break/ 题解 一开始以为,只要是 3 个数相加就可以,于是在错误的方向上越走越远: 后来发现并不只是 3 个数, ...

  9. 《dp补卡——343. 整数拆分、96. 不同的二叉搜索树》

    343. 整数拆分 1.确定dp数组以及下标含义. dp[i]:分拆数字i,可以得到的最大的乘积 2.确定递推公式: dp[i]最大乘积出处:从1遍历j到i,j * dp[i-j] 与 j * (i- ...

最新文章

  1. 【imx6】/dev中fb和video的对应关系
  2. SQL Tuning 基础概述10
  3. 继续说一下2016里面的json功能(1)
  4. python中raw函数_Python apply函数
  5. 夫妻两人同一个银行各自存50万,银行破产了该赔多少?
  6. 工业交换机中:千兆级别和快速级别传输效率对比
  7. adb native raact 夜神_React Native 与 夜神模拟器的绑定
  8. CIO应用商业智能技术系统的重构思考
  9. 基础编程题目集 6-8 简单阶乘计算 (10 分)
  10. [18/11/29] 继承(extends)和方法的重写(override,不是重载)
  11. mysql sql执行cmd命令行_命令行执行MySQL的sql文件
  12. [转]impala操作hive数据实例
  13. go json tag 字符串 整数_json:你或许还不知道的序列化操作(一)
  14. netmeeting无法共享桌面
  15. 计算机断层扫描法原理,能谱计算机断层扫描成像的概念和基本原理.PDF
  16. Git的author与committer的区别
  17. matlab 模糊提取,[转载]Matlab 的fspecial函数用法 图像模糊、提取边缘
  18. 11,SFDC 管理员篇 - 报表和数据的可视化
  19. 散列表及散列冲突解决方案
  20. 员工试用期转正申请书(泸州老窖)

热门文章

  1. 实现语音对讲_什么是五方通话?智慧电梯SIP五方对讲系统详细方案
  2. 安卓连接java_从零学习安卓自动化(java+appium方向):手机连接Appium(二)
  3. php极验证,WebGeeker-Validation: 一个强大的 PHP 参数验证器
  4. 什么作用计算机辅助工艺,什么是CAPP技术(计算机辅助工艺过程设计)
  5. python断点_Python断点()
  6. ROS的学习(十四)用C++写一个简单的接收者
  7. Java开发工程师,每个阶段需要掌握什么重点?
  8. 转)Ubuntu安装teamviewer
  9. 《团队-科学计算器-项目进度》
  10. python3.x的改进