SDUT 2868 贪心(最短时间过河问题)
来源:互联网 发布:在线答题的软件 编辑:程序博客网 时间:2024/05/22 18:24
我
Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^
题目描述
n个人要过一座桥,只是在漆黑的夜里,没有火把显然是不行的。但是这n个人只有一个火把,并且这座桥每次最多只能通过两个人。
每个人的速度不同,若两人组队,队伍速度等于较慢一人的速度。你要做的是计算这n个人全部通过这座桥的最少时间。
输入
多组输入。每组数据的第一行是输入一个n,代表有n(1 <= n && n <= 500)个人,接下来的n个整数,代表着每个人穿过这座桥所需要的时间。
输出
输出一个整数,代表最优策略所需时间。
示例输入
411052
示例输出
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;}
0 0
- SDUT 2868 贪心(最短时间过河问题)
- POJ 1700 过河坐船最短时间问题
- nyoj47过河问题(贪心)
- nyoj47过河问题(贪心)
- 过河问题(贪心)nyoj47
- POJ 2336 Ferry Loading II(运车过河的最短时间和次数)
- 贪心问题--过河问题
- 过河问题(南阳oj47)(贪心)
- NYOJ47——过河问题(贪心)
- NYOJ-47 过河问题(贪心)
- NYOJ 47 过河问题 (贪心)
- 南阳47 过河问题(经典贪心)
- NYOJ 题目47 过河问题 (贪心)
- POJ 1700 经典过河问题(贪心)
- 南阳47 过河问题(经典贪心)
- 南阳-47-过河问题(贪心)
- nyoj 47 过河问题(贪心)
- nyoj 47 过河问题(贪心)
- Android开发环境—软件(适用于win7/10 64位)
- 很简单的例子让你记住inner join、left join和right那点区别
- iOS7使用AFNetworking3.0上传图片时出现的问题-解决方案
- SmartTabLayout+PtrFrameLayout+ViewPager+Fragment简单实现
- Android第三方平台,快速应用开发
- SDUT 2868 贪心(最短时间过河问题)
- 缺失值处理方法
- 技术干货 | 初次微服务体验:从Docker容器农场说起
- 初始化与赋值之间的区别
- Java实现八大排序之一
- codeforces 653E. Bear and Forgotten Tree 2 连通问题
- 23 API-多线程(多线程概述,多线程实现方案,线程控制常见方法,线程安全问题及解决)
- 用递归函数求解
- Mysql中文乱码问题(unbutu)