笔试-士兵过河

应用

一支N个士兵的军队正在趁夜色逃亡,途中遇到一条湍急的大河。敌军在T的时长后到达河面,没到过对岸的士兵都会被消灭。现在军队只找到了1只小船,这船最多能同时坐上2个士兵。

1.当1个士兵划船过河,用时为 a[i]; 0<=i<N

2.当2个士兵坐船同时划船过河时,用时为 max(a[j],a[i])两士兵中用时最长的

3.当2个士兵坐船 1 个士兵划船时,用时为 a[i]*10; a[i]为划船士兵用时

4.如果士兵下河游泳,则会被湍急水流直接带走,算作死亡。

请帮忙给出一种解决方案,保证存活的士兵最多,且过河用时最短。

实现

python 复制代码
N = int(input("士兵数量:"))
T = int(input("敌军到达时长:"))

strs = input("每个士兵过河时长:").split()
left = [int(i) for i in strs]

right = []
total = 0

result = [0, T]

def GO(left, right, total):

    left.sort()
    
    L = [x for x in left]
    R = [x for x in right]

    if len(left) == 0 or total > T:
        # print(len(right), total)
        # 实时更新存活人数、时长
        if len(right) > result[0]:
            result[0] = len(right)
            result[1] = total
        
        if len(right) == result[0]:
            if total < result[1]:
                result[1] = total

    if len(left) == 1 and total <= T:
        # 第一种方案
        s = left[0]
        t = total + s

        if t <= T:
            right.append(s)
            left.remove(s)

            BACK(left, right, t)
            # 复原
            left = [x for x in L]
            right = [x for x in R]
        else:
            if len(right) > result[0]:
                result[0] = len(right)
                result[1] = total
            
            if len(right) == result[0]:
                if total < result[1]:
                    result[1] = total
 

    if len(left) >= 2 and total <= T:
        # 第二、三种方法
        for i in range(0, len(left)):
            for j in range(i+1, len(left)):

                s1 = left[i]
                s2 = left[j]

                t = total + min(s2, s1 * 10)

                if t <= T:
                    right.append(s1)
                    right.append(s2)
                    left.remove(s1)
                    left.remove(s2)

                    BACK(left, right, t)

                    left = [x for x in L]
                    right = [x for x in R]
                else:
                    if len(right) > result[0]:
                        result[0] = len(right)
                        result[1] = total
                    
                    if len(right) == result[0]:
                        if total < result[1]:
                            result[1] = total

def BACK(left, right, total):
    
    right.sort()

    L = [x for x in left]
    R = [x for x in right]

    if len(left) == 0 or total > T:
        if len(right) > result[0]:
            result[0] = len(right)
            result[1] = total
        
        if len(right) == result[0]:
            if total < result[1]:
                result[1] = total

    if len(left) > 0 and total <= T:
        # 第一种方案
        s = right[0]
        t = total + s

        if t <= T:
            left.append(s)
            right.remove(s)

            GO(left, right, t)
            
            left = [x for x in L]
            right = [x for x in R]
        else:
            if len(right) > result[0]:
                result[0] = len(right)
                result[1] = total
            
            if len(right) == result[0]:
                if total < result[1]:
                    result[1] = total

# 运行
GO(left, right, total)
# print(len(result))
print(result[0], result[1])
powershell 复制代码
士兵数量:5
敌军到达时长:43
每个士兵过河时长:12 13 15 20 50
3 40

士兵数量:5
敌军到达时长:130
每个士兵过河时长:50 12 13 15 20
5 128

士兵数量:7
敌军到达时长:171
每个士兵过河时长:25 12 13 15 20 35 20
7 171
相关推荐
vx_vxbs661 小时前
【SSM高校普法系统】(免费领源码+演示录像)|可做计算机毕设Java、Python、PHP、小程序APP、C#、爬虫大数据、单片机、文案
android·java·python·mysql·小程序·php·idea
田里的水稻1 小时前
Python_编程中代码注释相关格式 PEP8 — Python 官方代码风格指南
开发语言·python
丹宇码农2 小时前
consul集群搭建
python·consul
努力的小帅2 小时前
Python_OpenCV入门到精通——入门篇(看这一篇就足够了!!!)
图像处理·python·opencv·计算机视觉·视觉检测·视觉项目
洗紫2 小时前
Python常用内置模块教程:os/sys/datetime/random/json全解析
python
z***89712 小时前
Flask框架中SQLAlchemy的使用方法
后端·python·flask
G果2 小时前
ROS2 Cartographer纯定位导航遇到的问题
python·ros2·定位·cartographer·导航·launch·navigation2
Brduino脑机接口技术答疑3 小时前
脑机接口数据处理连载(二) 数据源头解析:脑电信号的采集原理与数据特性
人工智能·python·算法·数据分析·脑机接口
Wise玩转AI3 小时前
Day 25|智能体的“可观察性(Observability)体系”
人工智能·python·ai·chatgpt·ai智能体
p***92483 小时前
Python使用PyMySQL操作MySQL完整指南
数据库·python·mysql