转载 - 整数划分问题

出处: http://www.cnblogs.com/wanghetao/archive/2013/11/25/3442192.html

整数划分 --- 一个老生长谈的问题:

描述

整数划分是一个经典的问题。请写一个程序,完成以下要求。

 

 

输入
每组输入是两个整数n和k。(1 <= n <= 50, 1 <= k <= n)
输出
对于输入的 n,k;
第一行: 将n划分成若干正整数之和的划分数。
第二行: 将n划分成k个正整数之和的划分数。
第三行: 将n划分成最大数不超过k的划分数。
第四行: 将n划分成若干个 奇正整数之和的划分数。
第五行: 将n划分成若干不同整数之和的划分数。
第六行: 打印一个空行
样例输入
5 2
样例输出
7
2
3
3
3
提示
样例输出提示:
1.将5划分成若干正整数之和的划分为: 5, 4+1, 3+2, 3+1+1, 2+2+1, 2+1+1+1, 1+1+1+1+1
2.将5划分成2个正整数之和的划分为: 3+2, 4+1
3.将5划分成最大数不超过2的划分为: 1+1+1+1+1, 1+1+1+2, 1+2+2
4.将5划分成若干 奇正整数之和的划分为: 5, 1+1+3, 1+1+1+1+1
5.将5划分成若干不同整数之和的划分为: 5, 1+4, 2+3

 

 

下面是我根据网上的资料, 写出自己的分析和实现过程.

分析:

 

本题使用动态规划(Dynamic Programming)方法解决

一 求将n划分为若干正整数之和的划分数

 

1. 若划分的多个整数可以相同

  设dp[i][j]为将i划分为不大于j的划分数

  (1) 当i<j 时,i不能划分为大于i的数,所以dp[i][j]=dp[i][i];

  (2) 当i>j 时,可以根据划分中是否含有j分为两种情况。若划分中含有j,划分方案数为dp[i-j][j];若划分数中不含j,相当于将i划分为不大于j-1的划分数,为dp[i][j-1]。所以当i>j时dp[i][j]=dp[i-j][j]+dp[i][j-1];

  (3) 当i=j 时,若划分中含有j只有一种情况,若划分中不含j相当于将i划分为不大于j-1的划分数。此时dp[i][j]=1+dp[i][j-1]。

dp[n][n]可以解决问题1,dp[n][k]表示将n划分为最大数不超过k的划分数,可以解决问题3。

 

2. 若划分的正整数必须不同

  设dp[i][j]为将i划分为不超过j的不同整数的划分数

  (1) 当i<j时,i不能划分为大于i的数,所以dp[i][j]=dp[i][i];

  (2) 当i>j时,可以根据划分中是否含有j分为两种情况。若划分中含有j,则其余的划分中最大只能是j-1,方案数为dp[i-j][j-1];若划分中不含j,相当于将i划分为不大于j-1的划分数,为dp[i][j-1]。所以当i>j时dp[i][j]=dp[i-j][j-1]+dp[i][j-1];

  (3) 当i=j时,若划分中含有j只有一种情况,若划分中不含j相当于将i划分为不大于j-1的划分数。此时dp[i][j]=1+dp[i][j-1]

 

dp[n][n]表示将n划分为不同整数的划分数,可以解决问题5.

 

二 将n划分为k个整数的划分数

dp[i][j]为将i划分为j个整数的划分数。

  (1) i<j为不可能出现的情况,dp[i][j]=0;

  (2) 若i=j,有一种情况:i可以划分为i个1之和,dp[i][j]=1;

  (3) 若i>j,可以根据划分数中是否含有1分为两类:若划分数中含有1,可以使用“截边法”将j个划分分别截去一个1,把问题转化为i-j的j-1个划分数,为dp[i-j][j-1]; 若划分中不包含1,使用“截边法”将j个划分数的最下面一个数截去,将为题转化为求i-j的j个划分数,为dp[i-j][j]。所以i>j时dp[i][j]=dp[i-j][j-1]+dp[i-j][j]。

 

dp[n][k]为将n划分为k个整数的划分数,可解决问题2。

 

 

三 将n划分为若干正奇数之和的划分数

 

f[i][j]为将i划分为j个奇数之和的划分数,g[i][j]为将i划分为j个偶数之和的划分数。

使用截边法,将g[i][j]的j个划分都去掉1,可以得到f[i-j][j],所以

g[i][j] = f[i-j][j]。

f[i][j]中有包含1的划分方案和不包含1的划分方案。对于包含1的划分方案,可以将1的划分除去,转化为“将i-1划分为j-1个奇数之和的划分数”,即f[i-1][j-1];对于不包含1的划分方案,可以使用截边法对j个划分每一个都去掉一个1,转化为“将i-j划分为j个偶数之和的划分数”,即g[i-j][j]。

所以f[i][j]=f[i-1][j-1]+g[i-j][j]。

f[n][0]+f[n][1]+……+f[n][n]为将n划分为若干奇数的划分数,为问题4的答案。

 

参考: [1]  http://blog.csdn.net/a83610312/article/details/12685653

         [2]  http://www.cnblogs.com/jackge/p/3163835.html

转载于:https://www.cnblogs.com/sineatos/p/4089167.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/398825.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

27岁转行学什么计算机技术,27岁转行学IT有前途吗?

27岁转行学IT有前途吗?常常可以在网上看到这些转业者的困惑。其实&#xff0c;到了27岁还想转业&#xff0c;无外乎就是之前的工作确实没有什么发展前途。而IT行业作为朝阳产业&#xff0c;发展前景好&#xff0c;一年以上的工作经验可以轻松找到上万薪资的岗位。最重要的是IT…

王道操作系统考研笔记——1.1.1 操作系统的概念、功能和目标

如果这篇博客对您有用的话&#xff0c;可以给我点个赞吗&#xff0c;这对我很重要&#xff0c;谢谢&#xff01;❤️ 文章目录1.1.1 操作系统的概念、功能和目标1.1.1.1 操作系统的概念1.1.1.2 作为系统资源的管理者1.1.1.3 作为用户和计算机硬件之间的接口1.1.1.4 作为最接近硬…

《从零开始学Swift》学习笔记(Day 8)——小小常量、变量大作用

原创文章&#xff0c;欢迎转载。转载请注明&#xff1a;关东升的博客计算机语言学习中都有常量和变量&#xff0c;他们几乎是我编写代码的灵魂了&#xff0c;离开他们我真的是“活不了”常量是标识符的前面加上关键字let。常量其值在使用过程中不会发生变化的量&#xff0c;下面…

番外篇01:angularJS最佳实战

1. 项目组织方式 ng-strict-di&#xff1a;严格依赖注入模式。 在angularJS中&#xff0c;如果要使用模块中的内容&#xff0c;只要提供相关模块的名称即可&#xff0c;不需要自己查找、创建、初始化等等&#xff0c;就可以直接得到需要注入的模块进行使用&#xff0c;这种方式…

石油勘探是属于计算机应用中的,计算机在石油勘探开发中的应用论文

1油田中计算机应用的现状在我国的能源发展中&#xff0c;石油直接关系着能源安全战略&#xff0c;尤其是我国处在经济的快速发展阶段&#xff0c;很多领域对石油资源的需求很大&#xff0c;在世界范围上来说&#xff0c;我国已经处于世界产油五大国之一和石油消费国第二大国。石…

java -jar Incompatible argument to function

原因分析&#xff1a;jar包版本问题 解决方法&#xff1a;到工程中查看代码引用的jar包版本是多少&#xff0c;然后升级jar包&#xff0c;就可以了&#xff01; 转载于:https://www.cnblogs.com/nizuimeiabc1/p/4254173.html

王道操作系统考研笔记——1.1.2 操作系统的特征

如果这篇博客对您有用的话&#xff0c;可以给我点个赞吗&#xff0c;这对我很重要&#xff0c;谢谢&#xff01;❤️ 1.1.2 操作系统的特征 文章目录1.1.2 操作系统的特征1.1.2.1 并发1.1.2.2 共享1.1.2.3 并发和共享的关系1.1.2.4 虚拟1.1.2.5 异步1.1.2.6 小结我们接下来讲的…

mvc中html对象的方法吗,在MVC中使用jQuery模板进行HTML编码的Json对象

所以我有能力在我的网站上发表评论。用户进入场命中“后”和我阿贾克斯评论回到其在该行动的结果在MVC中使用jQuery模板进行HTML编码的Json对象public ActionResult PostComment(Comment NewComment){var repository GetRepository();var player GetPlayer();//we have this …

InputStream中通过mark和reset方法重复利用缓存

通过缓存InputStream可重复利用一个InputStream&#xff0c;但是要缓存一整个InputStream内存压力可能是比较大的。如果第一次读取InputStream是用来判断文件流类型&#xff0c;文件编码等用的&#xff0c;往往不需要所有的InputStream的数据&#xff0c;或许只需要前n个字节&a…

linux新起之秀-linux文件属性

2019独角兽企业重金招聘Python工程师标准>>> 从做到右&#xff1a;1为inode 的节点号&#xff1b;2为文件类型及权限&#xff1b;3为文件或目录的硬链接数&#xff1b;4为属主及所归属的组(属主就想象似地主&#xff0c;属组就像奴才的部分)&#xff1b;5为文件或者…

王道操作系统考研笔记——1.1.3 操作系统的发展及分类

如果这篇博客对您有用的话&#xff0c;可以给我点个赞吗&#xff0c;这对我很重要&#xff0c;谢谢&#xff01;❤️ 文章目录1.1.3 操作系统的发展及分类1.1.3.1 手工操作阶段1.1.3.2 单道批处理系统1.1.3.3 多道批处理系统1.1.3.4 分时操作系统1.1.3.5 实时操作系统1.1.3.6 其…

在手机测试html,借助 IIS 管理器 -- 用手机测试HTML页面

win 2008R2服务器 IIS配置&#xff1a;IIS需要创建网站、配置网站、设置应用程序池回收时间。Hadoop的作业调度器主要有三种:FIFO ,Capacity Scheduler 和Fair Scheduler 2.7.2版本默认是Capacity Schedulerclass RelatedManager"关联管理器"是在一对多或者多对多的关…

通过C学Python(3)列表的常用方法

查看一个对象的id&#xff1a;id(待查对象)检查一个数据的数据类型&#xff1a;type(数据或变量)查询一个序列对象的元素个数&#xff1a;len(序列对象)查看一个类有哪些方法可用&#xff1a;dir(数据或变量或类)查看一个类或函数的使用说明&#xff1a;help(待查数据) L.appen…

iOS开发之如何将字典转为模型

2019独角兽企业重金招聘Python工程师标准>>> 刚刚学习了如何读取plist&#xff0c;将plist中的字典对象转成数组对象。字典和模型都可以存储数据&#xff0c;既然都可以存储对象&#xff0c;那么为什么要把plist中的字典转成模型呢&#xff1f; 字典 &#xff1a;通…

王道操作系统考研笔记——1.1.4 操作系统的运行机制和体系结构

如果这篇博客对您有用的话&#xff0c;可以给我点个赞吗&#xff0c;这对我很重要&#xff0c;谢谢&#xff01;❤️ 文章目录1.1.4 操作系统的运行机制和体系结构1.1.4.1 两种指令、两种处理器状态、两种程序1.1.4.2 操作系统的内核1.1.4.3 操作系统的体系结构1.1.4.4 小结1.1…

计算机动画的主要应用领域,简述计算机的主要特点和主要应用领域

1."简述计算机的主要特点和主要应用领域特点:运算速度快计算精度高具有记忆能力具有逻辑判断能力在程序控制下自动工作" 2."应用领域科学计算信息处理和管理计算机辅助系统过程控制人工智能" 3."计算机硬件系统由哪几部分组成输入设备输出设备存储器运…

How to remove replication in SyteLine V2

以前曾经写了一篇《How to remove replication in Syteline》http://www.cnblogs.com/insus/archive/2011/12/20/2294831.html 过于简单。 由于SyteLine采用共享License的授技术&#xff0c;如果你从一个正式的数据库复制一个备份&#xff0c;恢复至另外一个站点上&#xff0c…

【Keras】基于SegNet和U-Net的遥感图像语义分割

上两个月参加了个比赛&#xff0c;做的是对遥感高清图像做语义分割&#xff0c;美其名曰“天空之眼”。这两周数据挖掘课期末project我们组选的课题也是遥感图像的语义分割&#xff0c;所以刚好又把前段时间做的成果重新整理和加强了一下&#xff0c;故写了这篇文章&#xff0c…

随机验证码实现案例

众所周知&#xff0c;验证码在我们的生活中都是非常常见的&#xff0c;很多公司都在各种折腾各种各样的验证码&#xff0c;这里简要的用一个小案例来实现验证码的功能&#xff08;ps:其实我挺讨厌验证码这个东西的&#xff09;。 建立一个javaweb工程&#xff0c;新建login.htm…