AcWing--蜗牛-->dp

5400. 蜗牛 - AcWing题库(python)


def get (x1,x2):
    if (x1<x2) :
        return (x2-x1)/0.7
    else:
        return (x1-x2)/1.3

# 输入

n=int(input())
# 初始化下标为1
x=list(map(int,input().split()))
x=[0]+x
a = [0] * n
b = [0] * (n + 1)

for i in range(1, n):
    input_data = input().split()
    a[i] = int(input_data[0])
    b[i + 1] = int(input_data[1])

# 定义dp状态方程
# 初始化
INF = float('inf')
f = [[INF] * 2 for _ in range(n + 1)]

# f(x,1)f(x,0)
f[1][0]=x[1]
for i in range (2,n+1):
    # 距离
    d=x[i]-x[i-1]
    # 1
    f[i][0]=min(f[i-1][0]+d,f[i-1][1]+get(b[i-1],0)+d)
    f[i][1]=min(f[i-1][0]+get(0,a[i-1]),f[i-1][1]+get(b[i-1],a[i-1]))
    
print("{:.2f}".format(min(f[n][0],f[n][1]+b[n]/1.3)))
    
    
    
    
    
    
    

有一个由多个小正六边形组成的蜂巢图案,蜂巢外缘各边的小正六边形数量 一致,且左右对称。 左右对称 (上图蜂巢图案外缘各边小正六边形数量为2) 以下为竖直对称线上小正六边形个数为3、5、7的3个蜂巢图案。 以下为竖直对称线上小正六边形个数为3、5、7的3个蜂巢图案。 编程实现: 有一只蜗牛要从竖直对称线顶端的小正六边形处移动到底端的小正六边形 中,它每次只能向它所在位置的小正六边形的左下方、正下方、右下方相邻 的小正六边形处移动。 中,它每次只能向它所在位置的小正六边形的左下方、正下方、右下方相邻 的小正六边形处移动。 已知竖直对称线上有N 个小正六边形,请计算出蜗牛从竖直对称线顶端移动 到底端共有多少条不同的移动路线。 例如: N=3, 竖直对称线上有3个小正六边形,如下图: 1 1 3 5 蜗牛从竖直对称线顶端的小正六边形处(1号处)移动到另一端的小正六边 形中(7号处)共有11条不同的路线。 11条不同的路线分别为: (1->2->5->7)、 (1->2->4->7)、 (1->2->4->5->7)、 (1->2- >4->6->7)、 (1->4->5->7)、 (1->4->7)、 (1->4->6->7)、 (1->3->4->5->7)、 (1->3->4->7)、 (1->3->4->6->7)、 (1- >3->6->7)。 输入描述 输入一个正整数N(2<N<30,N 上小正六边形的个数 输出措述 为奇数),表示图案上竖直对称线 输出一个整数,表示蜗牛从竖直对称线顶端移动到底端共有多少条不 同的移动路线
05-29
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

芝士小熊饼干

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值