南沙C++信奥赛陈老师解一本通题 1232:Crossing River

【题目描述】

几个人过河,每次过两人一人回,速度由慢者决定,问过河所需最短时间。

【输入】

输入t组数据,每组数据第1行输入n,第2行输入n个数,表示每个人过河的时间。

【输出】

输出t行数据,每行1个数,表示每组过河最少时间。

【输入样例】

1
4
1 2 5 10

【输出样例】

17
#include <bits/stdc++.h>
using namespace std;
int a[1001];
int main()
{
	int t,n;
	cin>>t;
	while(t--)
	{
		cin>>n;
		for(int i=1;i<=n;i++)
			cin>>a[i];
		int ans=0;
		sort(a+1,a+n+1);
		while(n>=4)
		{
			int method1=2*a[2]+a[1]+a[n] ;   // 让最快两对和最慢的两对分加过河 
			int method2=2*a[1]+a[n-1]+a[n];	// 每次让最快的和最慢的过河 
			ans+=min(method1,method2);
			n-=2;  	//一轮下来,又变成a[1][2]回来、每次送走最快的一对 
		}
		if(n==3)
			ans+=a[1]+a[2]+a[3];
		else if(n==2)
			ans+=a[2];
		cout<<ans<<endl;
	}
	return 0;
}

 

posted @   南沙区信奥赛老师  阅读(113)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示