深入理解动态规划算法:凑整数

栏目: 编程工具 · 发布时间: 5年前

内容简介:欢迎点击「算法与编程之美」↑关注我们!问题描述给定正整数n,找出所有不同的写法使得n为整数1,3,4的和。

欢迎点击「算法与编程之美」↑关注我们!

本文首发于微信公众号:"算法与编程之美",欢迎关注,及时了解更多此系列文章。

问题描述

给定正整数n,找出所有不同的写法使得n为整数1,3,4的和。

如:n=5时,不同的写法有5种。

解决方案

下面将介绍利用动态规划的思路来解决问题。

1、 将问题求解转化为函数形式。

从初中开始我们就接触了函数的概念,所谓函数指的就是给定自变量x,根据某种映射规则进行运算后,会得到一个值y。

举个简单的例子来说明,y=2·x就是一种映射关系,如给定x=2,进行运算后可以得到y=2·2=4。

而上述提到的问题,就是某种映射关系,只不过这种映射关系,我们目前还不知道具体是什么,需要我们去探索去解决。

假设现在已经知道了这种映射关系,即给定任意的正整数x,可以有y种符合要求的写法,即f(x) = y。

而示例给出的正是f(5) = 6,表示的是给定正整数5,符合要求的写法有6种。

2、分析递推情况。

接下来考虑计算正整数n的写法,即f(n)。

设n的一种可能的写法为:n = x 1 +x 2 +···+x m

我们从x m 这一项入手,考虑其有几种不同的写法,根据题意,x m 可能的值为1,3,4,因为每一项只能出现1,3,4。

令x m = 1,则:

n =  x 1 +x 2 +···+x m-1 + 1    (移项)

n-1 =  x 1 +x 2 +···+x m-1

通过上面的计算得出,当x m =1时,要计算正整数n的写法,就转化为求正整数n-1的写法即f(n-1)种。

以此类推,令x m = 3,则:

n =  x 1 +x 2 +···+x m-1 + 3

n-3 =  x 1 +x 2 +···+x m-1

问题转化为求n-3的写法即f(n-3)种。

令x m = 4,则:

n =  x 1 +x 2 +···+x m-1 + 4

n-4 =  x 1 +x 2 +···+x m-1

问题转化为求n-5的写法即f(n-4)种。

因此将上面的三种写法综合起来就得到求解正整数n的写法有:f(n) = f(n-1) + f(n-3) + f(n-4)。即要想求得正整数n的写法,我们需要先知道n-1, n-3和n-4这三个整数的写法,然后求和即可。

3、代码实现。

下面将介绍 python 的代码实现部分。

import numpy as np

MAX_N = 10

# 给定正整数n,找出所有不同的写法使得n为整数1,3,4的和。

dp = np.zeros((MAX_N,))

dp[1] = 1

dp[2] = 1

dp[3] = 2

dp[4] = 3

dp[5] = 5

for i in range(6, MAX_N):

dp[i] = dp[i - 1] + dp[i - 3] + dp[i - 4]

print(dp)

结语

本文通过一个简单的凑整数案例,介绍了函数的基本思想,并将其应用到解决问题的思路中,帮助大家深入的理解函数。利用动态规划的思路分析问题、解决问题并最终完成了python代码的编写。

拓展阅读:

深入理解遗传算法(一)

深入理解遗传算法(二)

从1到100求和学算法思维(一)

从1到100求和学算法思维(二)

从1到100求和学算法思维(三)

从1到100求和学算法思维(四)

从1到100求和学算法思维(五)

从1到100求和学算法思维(六)

where2 go 团队

微信号:算法与编程之美

深入理解动态规划算法:凑整数

长按识别二维码关注我们!

温馨提示: 点击页面右下角 “写留言” 发表评论,期待您的参与!期待您的转发!


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

黑客秘笈

黑客秘笈

[美]彼得·基姆 / 徐文博、成明遥 / 人民邮电出版社 / 2015-7-1 / 45.00

所谓的渗透测试,就是借助各种漏洞扫描工具,通过模拟黑客的攻击方法,来对网络安全进行评估。 本书采用大量真实案例和集邮帮助的建议讲解了在渗透测试期间会面临的一些障碍,以及相应的解决方法。本书共分为10章,其内容涵盖了本书所涉的攻击机器/工具的安装配置,网络扫描,漏洞利用,人工地查找和搜索Web应用程序的漏洞,攻陷系统后如何获取更重要的信息,社工方面的技巧,物理访问攻击,规避杀毒软件的方法,破解......一起来看看 《黑客秘笈》 这本书的介绍吧!

URL 编码/解码
URL 编码/解码

URL 编码/解码

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具