SDUT 2868 贪心(最短时间过河问题)

本文探讨了如何在有限资源下,利用最优策略使得多人通过一座桥所用时间最短。通过分析不同人员速度的影响,提出了具体算法步骤,确保在策略实施后,所有人员能够安全、高效地通过桥梁。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^

题目描述

n个人要过一座桥,只是在漆黑的夜里,没有火把显然是不行的。但是这n个人只有一个火把,并且这座桥每次最多只能通过两个人。
每个人的速度不同,若两人组队,队伍速度等于较慢一人的速度。你要做的是计算这n个人全部通过这座桥的最少时间。

输入

多组输入。每组数据的第一行是输入一个n,代表有n(1 <= n && n <= 500)个人,接下来的n个整数,代表着每个人穿过这座桥所需要的时间。

输出

输出一个整数,代表最优策略所需时间。

示例输入

4
1
10
5
2

示例输出

17

提示

假设人员编号按输入顺序从1到n,首先编号为1,4的人通过,编号为1的回来送火把,然后编号为2,3组队通过,编号为4的回来送火把,编号为1,4通过,结束。
Sum = 2 + 1 + 10 + 2 + 2 = 17。

来源

 
#include<cstdio>
#include<cstring>
#include<cmath>
#include<iostream>
#include<algorithm>
using namespace std;
int a[100000];
int main()
{
    int n;
    while(~scanf("%d",&n))
    {
        for(int i=0;i<n;i++)
            scanf("%d",&a[i]);
        sort(a,a+n);
        int sum=0;
        ///四个人作为一组进行看待
        ///两种方式第一种:每次走都是一个最大的携带一个最小的,然后小的单独回来
        ///第二种方式:第一次携带最小的两个去然后小的回来,之后携带两个最大的去,然后携带上一次的第二小的回来,
        while(n>3)
        {
            int sum1=2*a[0]+a[n-1]+a[n-2];  
            int sum2=a[0]+a[1]*2+a[n-1];
            if(sum1<sum2)
                sum+=sum1;
            else
                sum+=sum2;
            n-=2;
        }
        if(n==1)
            sum+=a[0];
        if(n==2)
            sum+=a[1];
        if(n==3)
            sum+=a[0]+a[1]+a[2];
        printf("%d\n",sum);
    }
    return 0;
}


### 山东理工大学 SDUT 排序算法实现及问题解决方案 #### 1. 背景介绍 关于山东理工大学(SDUT)在线评测系统的排序问题,存在特定背景下的挑战。某些题目不仅考察基本的编程能力还涉及到对特殊条件的理解与处理[^1]。 #### 2. 特殊情况说明 有部分题目属于特判题型,在实际比赛中可能遇到异常状况使得常规解法失效或者出现意想不到的结果。例如曾经发生过的服务器故障导致即使提交空白代码也能通过测试的情况[^2]。 #### 3. 解决方案概述 针对上述提到的问题以及更广泛的排序需求,下面提供一种通用而有效的Python实现方法来完成字符统计任务,并附带去除重复项的功能: ```python def remove_duplicates(student_list): seen = set() unique_students = [] for student_info in student_list: if student_info not in seen: unique_students.append(student_info) seen.add(student_info) return unique_students if __name__ == "__main__": students = [ '张三', '李四', '王五', '张三' ] result = remove_duplicates(students) print(result) ``` 这段程序能够有效地移除列表中的任何重复条目并保持原始顺序不变。它适用于处理像学生名册这样的数据集,其中可能存在冗余记录需要清理[^5]。 #### 4. 性能考量 当考虑算法性能时,除了时间效率外还需要关注空间消耗。对于递归操作而言,尽管单次调用所需额外内存有限,但由于栈帧累积效应可能导致整体开销增加至O(log n),这取决于具体应用场景和输入规模[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值