过桥

2024-01-29 20:18
文章标签 过桥

本文主要是介绍过桥,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在这里插入图片描述
.
.
.
.
.
分析

最容易想到的一个贪心策略是:

		让一个最快的人来回带人

但是显然是错误的
比如4个人:1 1 100000 100000
最快的来回带的话要:1+1+100000+1+100000=200003

但是如果先将1 1运过去的话,然后1回来,再让100000 100000一起过去,再让右边的1来回一趟,就只要1+1+100000+1+1=100004,这样显然更优

所以第一种贪心的策略显然是不合理的,下面换种贪心策略:

首先,慢的肯定是过了桥之后不回来了
就上面那种情况,我们就是先将最快的两个带过去,
然后快的一个过来,让两个慢的过去,然后让快的再来,…

然而:
如果是1 10000 10000 10000,答案又不对了(还是第一种策略优)

结合以上两点,对于最慢的两个人我们有两种处理方法就是:
1、让最快的人来回带
2、让最快的两个人过去,再让最慢的两个一起过去,这样就减少了最慢的重复计算

关于这个贪心策略的证明是:

首先,过桥速度排在第三名之后的人不可能担任送回手电筒的任务,

原因是不如速度第一和第二的人送回来得高效。这样,
当前左岸速度最慢的人过桥后就不可能再回来,

那么我们可以优先让速度慢的过河,因为其不可能返回,先过后过等效。

如此一来,就可以得到上述的贪心策略。
.
.
.
.
.
程序:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int main()
{int n,a[10000];scanf("%d",&n);for (int i=1;i<=n;i++)scanf("%d",&a[i]);sort(a+1,a+n+1);int i=n;long long ans=0,x,y;while (1){if (i==2) ans+=a[2];if (i==3) ans+=a[1]+a[2]+a[3];if (i<=3) break;x=2*a[2]+a[1]+a[i];y=a[1]+a[i]+a[1]+a[i-1]; if (x<y) ans+=x; else ans+=y;i-=2;}printf("%d",ans);return 0;
}

这篇关于过桥的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/658069

相关文章

A、B、C、D四人过桥

某天晚上有A、B、C、D四个人要通过一座桥,他们只有一个手电筒,每次过桥都需要手电筒照明,桥上每次最多可同时过两个人,他们用最少次数全部从一边到达桥另一边有多少种方案。请用一条sql完成并输出所有方案(列出每个方案中每个人过桥次数)。 答案示例: A B C D 1 2 3 4 --------------------------------------------答题思路----

杂题_POJ上的过桥问题

本文出自:http://blog.csdn.net/svitter 过桥问题解释:一条船可以坐两个人,但是有很多人要过河,所以送过一个人去,另一个人还要回来接。使所有人过河之后时间最短,如何求? 此问题曾作为阿里巴巴题目 初看此题想的太过简单,直接让跑的最快的送过去,自己再跑回来即可。其实不然。 函数g(a,b)表示过河,b(a)表示回来。如果过河时间分别为1,2,5,10

动态规划算法--斐波拉契数列、钢条切割、小朋友过桥、01背包问题

文章目录 动态规划1.求斐波拉契数列Fibonacci 。2.钢条切割3.小朋友过桥问题4.01背包问题 购物单:有依赖的01背包问题5. 最多路径数6. 编辑距离7. 4 键键盘问题8. leetcode322. 零钱兑换9. leetcode983. 最低票价10. 经典算法题:高楼扔鸡蛋11. leetcode 221. 最大正方形12.leetcode 10. 正则表达式匹配13.

过桥(牛客)(逆推dp)

原题链接:登录—专业IT笔试面试备考平台_牛客网  思路: 其实如果走到一个a[i]是负数的地方,也就是要倒退,这样是没有用的。因为如果说前面还有a[i]大于0,我倒退回去了然后下一步能走到更远的地方,但是这样用的步数比之前就在那个地方的步数要多啊。所以说如果a[i]< 0,对答案是没有贡献的。 我把没有贡献地方dp的时候设置为-1,那么下次碰到就直接跳过。n不大,双重循环能过。

CocosCreator之KUOKUO带你做疯狂木板-过桥(2)

本次引擎2.0.5 编辑工具VSCode 目标: 第二部分,过桥与得分。 接着上一节: 我们实现了木板的变长与下落。 现在我们实现一个牛逼的平台,怎么说它牛逼呢?我准备全程就用它一个来完成所有功能。 看KUOKUO怎么实现。console.log(滑稽) 首先,我们复制个ground然后改名字为move_ground,然后拖到中间。 好了,然后我们在mian脚本里声明它:

创新思维:腾讯产品经理如何解决一头800kg牛的过桥难题?

亲爱的小伙伴们,大家好!我是小米,一个热爱技术、热爱分享的90后,今天我要和大家一起探讨一道经典的面试题——“腾讯产品经理面试题:一头牛重800kg,一座桥承重700kg,牛该怎么过桥?”这个问题看似简单,但其实蕴含着许多深刻的思考,非常值得我们一起来解析。 面试的重点 这个问题既考察了数学和物理知识,又涉及到逻辑思维和创造力。在面试中,面试官通常更关注你的思考过程和解决问题的方法,而不仅仅是

4人过桥问题

问题:在漆黑的夜里,四位旅行者来到了一座狭窄而且没有护栏的桥边。如果不借助手电筒的话,大家是无论如何也不敢过桥去的。不幸的是,四个人一共只带了一只手电筒,而桥窄得只够让两个人同时通过。如果各自单独过桥的话,四人所需要的时间分别是1,2,5,10分钟;而如果两人同时过桥,所需要的时间就是走得比较慢的那个人单独行动时所需的时间。问题是,你如何设计一个方案,让用的时间最少。 我用的办法很暴力,就