一、爬楼梯问题:
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、运行结果