SDUT2868_n人过河问题(贪心)
2014-05-30 19:16
169 查看
我
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。
来源
解题报告贪心。。。论证过程详解http://blog.csdn.net/michael_jordaner/article/details/27261037
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int main()
{
int i,j,n,num[1000],a,b,y,z;
while(cin>>n)
{
for(i=0; i<n; i++)
cin>>num[i];
sort(num,num+n);
int sum=0;
while(n>=4)
{
a=num[0];
b=num[1];
y=num[n-2];
z=num[n-1];
if(2*b<y+a)
{
sum+=2*b+a+z;
n-=2;
}
else
{
sum+=a*2+z+y;
n-=2;
}
}
if(n==3)sum+=num[0]+num[1]+num[2];
else if(n<=2)sum+=num[n-1];
cout<<sum<<endl;
}
return 0;
}
相关文章推荐
- 【贪心DP】过河问题
- HOJ 1262 贪心 ------ 过河问题
- 贪心-nyoj-过河问题
- 过河问题(贪心)
- 贪心算法之——过河问题(nyoj47)
- POJ-1700 过河问题【贪心】
- 南阳47 过河问题(经典贪心)
- POJ 1700 经典过河问题(贪心)
- nyoj 47 过河 过河问题 【贪心】
- NY 47 过河问题【贪心】
- 智力+贪心的过河问题
- 过河问题 NYOJ 贪心
- poj 1700 Crossing River 过河问题。贪心
- POJ 1700 经典过河问题(贪心)
- 南阳47 过河问题(经典贪心)
- NYOJ_47 过河问题,贪心选择
- NYOJ-47 过河问题(贪心)
- POJ 1700 & NYLG 47 过河问题(贪心 || DP)
- nyoj47过河问题(贪心)
- NYOJ 47 过河问题 (贪心)