POJ 1700

传送门:http://poj.org/problem?id=1700
题目大意:有n个人过河,只有一条船,船最多载两个人,时间取决于两个人用时最长的那个,问所有人最短的过河时间。

分析:设4个人a,b,c,d,用时a

代码:

#include<iostream>
#include<algorithm>
#include<cstdio>
using namespace std;
int main()
{
     
	int t,n,a[1100],time;
	scanf("%d",&t);
	while(t--)
	{
     
		time=0;
		scanf("%d",&n);
		for(int i=1; i<=n; i++)
			scanf("%d",&a[i]);
		sort(a+1,a+1+n);
		int m=n;
		while(m>0)
		{
     
			if(m==1)
			{
     
				time+=a[1];
				m=0;
			}
			if(m==2)
			{
     
				time+=a[2];
				m=0;
			}
			if(m==3)
			{
     
				time+=a[1]+a[2]+a[3];//对于3个人a,b,c(a
			}
			if(m>=4)
			{
     
			//每次只考虑两个人,最小的两个,最大的两个。选方案一或者方案二
			   time+=min(time+=a[1]+2*a[2]+a[m],2*a[1]+a[m-1]+a[m]);
				m-=2;
			}
		}
		printf("%d\n",time);
	}
}

你可能感兴趣的:(贪心)