python动态规划组合数最大_编写用动态规划法求组合数()的算法。

,动态规划法是把多阶段过程转化为一系列单阶段

问题,利用各阶段之间的关系,逐个求解,创立了解决这类过程优化问题的方法

。我把它

转化为

Cmn=C(m-1)n+C(m-1)(n-1)

来求解。

2.

数学建模:

要计算

Cmn=C(m-1)n+C(m-1)(n-1)

,建立的数学模型为:

1

0

11

1

121

2

1331

3

14641

4

... ...

而要求的结果就是第

m

行第

n

列的数字,构造一个动态数组

a[100],

每一次生成一行,而生

成下一行时根据上一行的数据动态更新数组中的内容,就可以实现本算法了。

3.

算法设计:

首先接收用户输入的

m,n

的值,算法开始时,令

a[0]=1

,表示第

0

行,然后利用

for

循环,依次依照

a[j]=a[j]+a[j-1]

来依次更新第

1

到第

m

行的数组,然后输出第

m

行的第

n

列就行了。

For

循环为:

for(i=1;i<=m;i++)

for(a[i]=1,j=i-1;j>=1;j--)

a[j]+=a[j-1];

4.

算法复杂度:

由上述算法可知,在更新第

i

层时,需要

i-1

个步骤,所以总的复杂度为

1+2+3+...+

(

m-1

)

,即

n

的平方。

5.

代码实现:

#include

using namespace std;

#define SIZE 200

int main()

{

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值