迅雷2019校招----python红黑积木求和

1.问题:
 红黑积木求和
有红黑两种颜色的积木,红色代表正数A,黑色代表负数B,选出17块积木排成一排,使得任意相邻7块积木之和都小于0,
如何选才能使17块积木之和最大,最大值是多少?

2.分析:
任意相邻的7个积木之和都小于零,假使这7个值(比如1至7)之和最大(虽然为负数),
为了使17块积木之和最大,我们可以设定任意相邻的7块积木之和最大且相等,故得出以下关系:
1,8,15位置为相等的数,2,9,16为相等的数,3,10,17位置数相同,...如下表所示:
1234567
891011121314
151617    
设 在头7个位置中,正数A的数量为i,最好从左边(具有3个相同位置的数)开始选择,
负数的数量为(7-i)个,最好从右边开始选择。
if i>0 and i<=3:
    max = 3*i*A + 2*4*B+3*(7-i-4)*B
if i>3:
    max = 3*3*A+2*(i-3)*A+2*(7-i)*B
#  A 为正数, B为负数
def A_num(A,B):
    i = 7
    for i in range(7,0,-1):
        if A*i+(7-i)*B < 0:   #  i(0,7) 为 正数的个数,
            break
    max1 = 2  * (7-i) * B +(3+2*i)*A
    return max1

print("A_num:",A_num(10,-61))  #  A_num: 28

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值