活动安排以及爬楼梯问题(python语言版))

一、爬楼梯问题:

1、算法设计:

def climbStairs(n):
    a = 1
    b = 2
    for i in range(2, n):
        c = a + b 
        a = b
        b = c
    return b
print(climbStairs(10))

2、中间记录表;

n=10
dp=[1 for i in range(n+1)]  #记录每一层阶梯的可能性,为了方便编码,将dp[0]设为1
for i in range(len(dp)):
    if i<2:
        dp[i]=1
    else:
        dp[i]=dp[i-1]+dp[i-2]
print(dp)
print(dp[n])

3、问题的解。
在这里插入图片描述

二、活动安排问题
以活动时间短作为贪心策略
1、活动安排问题的算法实现;

def greedy_activity(a):
    a.sort(key = lambda x: x[2])
    print('\nsort by finish time:')
    print(np.array(a))

    res = [a[0][0]]
    j = 0
    for i in range(1, len(a)):
        if a[i][1] >= a[j][2]:
            res.append(a[i][0])
            j = i
    return res

2、测试用例;

import numpy as np

def greedy_activity(a):
    a.sort(key = lambda x: x[2])
    print('\nsort by finish time:')
    print(np.array(a))

    res = [a[0][0]]
    j = 0
    for i in range(1, len(a)):
        if a[i][1] >= a[j][2]:
            res.append(a[i][0])
            j = i
    return res

# a含三列:活动编号,开始时间,结束时间
a = np.array([
    [0,  9, 15],
    [1,  0,  5],
    [2,  5,  9],
    [3, 10, 14],
    [4, 22, 27],
    [5, 19, 26],
    [6,  5, 10],
    [7, 14, 21],
    [8, 14, 18],
    [9,  4,  7]
])

print('Activity data:')
print(np.array(a))

res = greedy_activity(a.tolist())
print('\nselect:')
print(res)
print(a[res])
print('activity count:', len(res))

3、运行结果
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值