0
点赞
收藏
分享

微信扫一扫

题解-P1809 过河问题

minute_5 2022-03-19 阅读 31
c++

P1809 过河问题

#include<iostream>
#include<algorithm>
#include<string>
#include<math.h>
#include<limits.h>
using namespace std;
long long a[100005];
long long dh(long long a[],int n)
{
	long long sumt=0;
	int m=n;//未渡河的人数 
	while(m>=1)
	{
		if(m==1)
		{
			sumt+=a[1];
			break; 
		}else if(m==2)
		{
			sumt+=a[2];
			break;
		}else if(m==3)
		{
			sumt+=a[1]+a[2]+a[3];
			break;
		}else{
			int a1=a[m]+a[1]+a[m-1]+a[1];//让最快的人带最慢的人过去,再回来 
			int a2=a[2]+a[1]+a[m]+a[2];//让最快两人先过去,第一快的先回来,再让最慢的两人过去,然后,让第二快的人回来 
			sumt+=min(a1,a2);
			m-=2;//有两人以已经渡河成功 
		}
	}
	return sumt;
}
int main()
{
	int n;
	cin>>n;
	for(int i=1;i<=n;i++) cin>>a[i];
	sort(a,a+n+1);
	cout<<dh(a,n);
	return 0;
 } 
举报

相关推荐

0 条评论