问题:

过河问题

时间限制:1000 ms  |  内存限制:65535 KB
难度:5
描述

在漆黑的夜里,N位旅行者来到了一座狭窄而且没有护栏的桥边。如果不借助手电筒的话,大家是无论如何也不敢过桥去的。不幸的是,N个人一共只带了一只手电筒,而桥窄得只够让两个人同时过。如果各自单独过桥的话,N人所需要的时间已知;而如果两人同时过桥,所需要的时间就是走得比较慢的那个人单独行动时所需的时间。问题是,如何设计一个方案,让这N人尽快过桥。

输入
第一行是一个整数T(1<=T<=20)表示测试数据的组数
每组测试数据的第一行是一个整数N(1<=N<=1000)表示共有N个人要过河
每组测试数据的第二行是N个整数Si,表示此人过河所需要花时间。(0<Si<=100)
输出
输出所有人都过河需要用的最少时间
样例输入
1
4
1 2 5 10
样例输出
17

分析:

当只有一个人时:时间s=a[0];

当人数为二:时间s=a[1];

当人数为三:时间s=a[0]+a[1]+a[2];

当人数为四:时间s=a[0]+a[2]>2*a[1] ? a[0]+3*a[1]+a[3] : 2*a[0]+a[1]+a[2]+a[3];(如:一:1,2,5,10;二:1,7,8,10)

我的代码:

#include <stdio.h>
#include <algorithm>
using namespace std;
int main()
{int t;scanf("%d", &t);while(t--){int n, a[1005]={0};scanf("%d", &n);for(int i=0; i<n; i++){scanf("%d", &a[i]);}sort(a, a+n);if(n==1) printf("%d\n", a[0]);else if(n==2) printf("%d\n", a[1]);else if(n==3) printf("%d\n", a[0]+a[1]+a[2]);else if(n==4) printf("%d\n", 2*a[1]<a[0]+a[2] ? a[0]+3*a[1]+a[3] : 2*a[0]+a[1]+a[2]+a[3]);else {int s=0;for(int i=n-1; i>1; i-=2){if(i-1==2)//只剩4个人,所有人都过去{s += 2*a[1]<a[0]+a[i-1] ? a[0]+3*a[1]+a[i] : 2*a[0]+a[1]+a[i-1]+a[i];break;}if(i-1==1)//只剩3个人,所有人都过去{s += a[0]+a[1]+a[i];break;}/*此时剩余人数大于4,只需要通过最快的两个人(或一个人)把最后两个人送到对岸,然后自己返回接剩下的人*/ s += 2*a[1]<a[0]+a[i-1] ? a[0]+2*a[1]+a[i] : 2*a[0]+a[i-1]+a[i];}printf("%d\n", s);}}return 0;
}

贪心算法之——过河问题(nyoj47)相关推荐

  1. 多人过河问题C语言贪心算法,南阳oj贪心算法之过河问题

    /** 过河问题 时间限制:1000 ms | 内存限制:65535 KB 难度:5 描述 在漆黑的夜里,N位旅行者来到了一座狭窄而且没有护栏的桥边.如果不借助手电筒的话,大家是无论如何也不敢过桥去的 ...

  2. 贪心算法——小船过河

    题意:N个人过河,船每次只能坐两个人,船载每个人过河的所需时间不同t[i],每次过河的时间为船上的人的较慢的那个,问最快的过河时间.(船划过去要有一个人划回来) #include<iostrea ...

  3. 过河问题(贪心算法)(python)

    过河问题(贪心算法) - CapitalAccumulation - 博客园 思路非常清晰 过河问题 一.问题描述 二.问题答案 三.扩展 四.问题推广 五.对于本题的最优选择: coding 一.问 ...

  4. 贪心算法实例(五):小船过河问题

    N个人过河,船每次只能坐两个人,船载每个人过河的所需时间不同t[i],每次过河的时间为船上的人的较慢的那个,问最快的过河时间.(船划过去要有一个人划回来)     最优选择:       先将所有人过 ...

  5. 农夫过河——python贪心算法实现

    1.问题描述: 一个农夫在河的西岸带了一匹狼.一只羊和一棵白菜,他需要把这三样东西用船带到河的东岸.然而,这艘船只能容下农夫本人和另外一样东西.如果农夫不在场的话,狼会吃掉羊,羊也会吃掉白菜. 2.问 ...

  6. 贪心算法----过河问题

    问题: 在漆黑的夜里,N位旅行者来到了一座狭窄而且没有护栏的桥边.如果不借助手电筒的话,大家是无论如何也不敢过桥去的.不幸的是,N个人一共只带了一只手电筒,而桥窄得只够让两个人同时过.如果各自单独过桥 ...

  7. 多人过河问题C语言贪心算法,贪心算法----过河问题

    问题: 在漆黑的夜里,N位旅行者来到了一座狭窄而且没有护栏的桥边.如果不借助手电筒的话,大家是无论如何也不敢过桥去的.不幸的是,N个人一共只带了一只手电筒,而桥窄得只够让两个人同时过.如果各自单独过桥 ...

  8. 贪心算法:小船过河问题

    贪心算法:小船过河问题 题意:N个人过河,船每次只能坐两个人,船载每个人过河的所需时间不同t[i],每次过河的时间为船上的人的较慢的那个,问最快的过河时间.(船划过去要有一个人划回来) 最优选择: 先 ...

  9. 嵌入式必会!C语言最常用的贪心算法就这么被攻略了

    01 基本概念 贪心算法是指在对问题求解时,总是做出在当前看来是最好的选择.也就是说,不从整体最优上加以考虑,只做出在某种意义上的局部最优解.贪心算法不是对所有问题都能得到整体最优解,关键是贪心策略的 ...

最新文章

  1. 基于VMwareWorkstation技术预览版2012上的WinServer8测试版安装
  2. [转][自勉]程序员困境:底层编码能力正逐步丧失
  3. docker 配置加速器
  4. 释疑のABAP输入框字符自动变成大写问题
  5. 命名时取代基优先顺序_【选修五】高中化学重难点知识:有机物的命名方法
  6. rar x64 5.50 linux,WinRAR 5.50 简体中文正式版发布
  7. jeecg输入中文查询导表为空_简单查询
  8. JavaScript学习笔记 -- ES6学习(三) 变量的解构赋值
  9. Cloudera Certified Associate Administrator案例之Install篇
  10. POJ3617 Best Cow Line【水题】
  11. ipynb pycharm 运行_Mask RCNN代码之demo.ipynb运行与理解
  12. Ubuntu英语环境下完全显示文泉驿微米黑字体的字体配置文件
  13. nssa和stub_STUB与NSSA区域总结
  14. r 对一列计数_根据另一列对项目进行计数
  15. HTML超链接标签—链接QQ在线聊天
  16. nRF52832 BLE UART
  17. 如何使用NodeJS发送邮件
  18. 爬虫开发入门:使用 Pyspider 框架开发爬虫
  19. HTML网页设计:电影网站设计——电影我不是药神(4页) HTML+CSS+JavaScript
  20. 傅里叶实现高精度乘法

热门文章

  1. 【重磅】神策分析 1.13 版本上线 ,持续深耕打造场景化数据分析
  2. bootstrap checkbox选中事件
  3. The road to learning English-Listening
  4. Application Virtualization 4.5 部署之(三)(
  5. Ioc的推荐实现方式
  6. 在JavaScript文件中读取properties文件的方法
  7. 活久见的重构 - iOS 10 UserNotifications 框架解析
  8. 和我一起学《HTTP权威指南》——安全HTTP与HTTPS
  9. SegmentFault D-Day 北京:大数据
  10. Ubuntu 下 redmine 安装配置