nyoj 47 过河 过河问题 【贪心】

经典贪心;

两种方案:一:让最快的和次最快的先过去,最快的回来,然后最慢的和次最慢的过去,次最快的回来a[0]+a[1]+a[1]+a[n-1]

二:最快的和最慢的过去,最快的回来,最快的和当前最慢的过去,最快的回来。a[0]+a[n-1]+a[0]+a[n-2]

每次取最优解。

注意:最后剩余没过的人小于等于3的时候,要特殊判断。

代码:

#include <cstdio>
#include <cstring>
#include <algorithm>
#define INF 0x3f3f3f3f
using std::sort;
int s[1005], ans, n;

void solve(){
	ans = 0;
	int st = 0, en = n, len = 0;
	while(en > 3){
		int temp1 = s[en-1]+2*s[1]+s[0];
		int temp2 = 2*s[0]+s[en-1]+s[en-2];
		ans += temp1<temp2 ?temp1:temp2;
		en -= 2;
	}
	if(en == 3) ans += s[0]+s[2];
	ans += s[1];
	printf("%d\n", ans);
}
int main(){
	int t, i, j;
	scanf("%d", &t);
	while(t --){
		scanf("%d", &n);
		for(i = 0; i < n; i ++) scanf("%d", &s[i]);
		sort(s, s+n);
		if(n<3) printf("%d\n", s[n-1]);
		else solve();
	}
	return 0;
}

题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=47

时间: 2024-12-21 15:56:56

nyoj 47 过河 过河问题 【贪心】的相关文章

POJ-1700 &amp;&amp;NYOJ 47 过河问题【贪心】

链接:NYOJ:click here POJ:click here 题意: 在漆黑的夜里,N位旅行者来到了一座狭窄而且没有护栏的桥边.如果不借助手电筒的话,大家是无论如何也不敢过桥去的.不幸的是,N个人一共只带了一只手电筒,而桥窄得只够让两个人同时过.如果各自单独过桥的话,N人所需要的时间已知:而如果两人同时过桥,所需要的时间就是走得比较慢的那个人单独行动时所需的时间.问题是,如何设计一个方案,让这N人尽快过桥. 思路: 贪心思想(一般都是先排序) 每次从此岸到对岸移动的两个人要么这两个人中有一

nyoj 47——过河问题——————【贪心】

过河问题 时间限制:1000 ms  |  内存限制:65535 KB 难度:5 描述 在漆黑的夜里,N位旅行者来到了一座狭窄而且没有护栏的桥边.如果不借助手电筒的话,大家是无论如何也不敢过桥去的.不幸的是,N个人一共只带了一只手电筒,而桥窄得只够让两个人同时过.如果各自单独过桥的话,N人所需要的时间已知:而如果两人同时过桥,所需要的时间就是走得比较慢的那个人单独行动时所需的时间.问题是,如何设计一个方案,让这N人尽快过桥. 输入 第一行是一个整数T(1<=T<=20)表示测试数据的组数每组测

nyoj 47 过河问题

过河问题 时间限制:1000 ms  |  内存限制:65535 KB 难度:5 描述 在漆黑的夜里,N位旅行者来到了一座狭窄而且没有护栏的桥边.如果不借助手电筒的话,大家是无论如何也不敢过桥去的.不幸的是,N个人一共只带了一只手电筒,而桥窄得只够让两个人同时过.如果各自单独过桥的话,N人所需要的时间已知:而如果两人同时过桥,所需要的时间就是走得比较慢的那个人单独行动时所需的时间.问题是,如何设计一个方案,让这N人尽快过桥. 输入 第一行是一个整数T(1<=T<=20)表示测试数据的组数每组测

NYOJ 47过河问题

主要思路:先排序.有两种可能是最小的情况,一种是让最小的去带着最大的过去,然后最小的再回来,还有一种就是先最小的和第二小的一块过去, 然后最小的回来,让最大的和第二大的过去,接着第二小的回来,第二小和最小的接着在过去,最小的接着回来,主要就是这两种,用的时候判断一下,接着的问题就是n是奇数还是偶数的问题 排完序之后的a[0]最小, a[n-1]最大,第一种的时间为a[0] + a[n -1] + a[0] + a[n - 2];其中a[0]是最短的时间,a[n-1]是最大的时间,下面一样, 第二

南阳47(过河问题)

过河问题 时间限制:1000 ms  |  内存限制:65535 KB 难度:5 描述 在漆黑的夜里,N位旅行者来到了一座狭窄而且没有护栏的桥边.如果不借助手电筒的话,大家是无论如何也不敢过桥去的.不幸的是,N个人一共只带了一只手电筒,而桥窄得只够让两个人同时过.如果各自单独过桥的话,N人所需要的时间已知:而如果两人同时过桥,所需要的时间就是走得比较慢的那个人单独行动时所需的时间.问题是,如何设计一个方案,让这N人尽快过桥. 输入 第一行是一个整数T(1<=T<=20)表示测试数据的组数每组测

过河问题(贪心算法)

一.问题描述 在漆黑的夜里,甲乙丙丁共四位旅行者来到了一座狭窄而且没有护栏的桥边.如果不借助手电筒的话,大家是无论如何也不敢过桥去的.不幸的是,四个人一共只带 了一只手电筒,而桥窄得只够让两个人同时过.如果各自单独过桥的话,四人所需要的时间分别是1.2.5.8分钟:而如果两人同时过桥,所需要的时间就是走 得比较慢的那个人单独行动时所需的时间.问题是,如何设计一个方案,让这四人尽快过桥. 二.问题答案       这个问题本身并不太难,即使用简单的枚举法逐一尝试也能找到正确答案. 两人过桥后,需要

POJ 1700 经典过河问题(贪心)

POJ题目链接:http://poj.org/problem?id=1700 N个人过河,船每次最多只能坐两个人,船载每个人过河的所需时间不同,问最快的过河时间. 思路: 当n=1,2,3时所需要的最小时间很容易求得,现在由n>=4,假设n个人单独过河所需要的时间存储在数组t中,将数组t按升序排序,那么 这时将单独过河所需要时间最多的两个旅行者送到对岸去,有两种方式: 1> 最快的(即所用时间t[0])和次快的过河,然后最快的将船划回来,再次慢的和最慢的过河,然后次快的将船划回来. 即所需时间

过河问题(贪心)

过河问题 时间限制:1000 ms  |  内存限制:65535 KB 难度:5 描述 在漆黑的夜里,N位旅行者来到了一座狭窄而且没有护栏的桥边.如果不借助手电筒的话,大家是无论如何也不敢过桥去的.不幸的是,N个人一共只带了一只手电筒,而桥窄得只够让两个人同时过.如果各自单独过桥的话,N人所需要的时间已知:而如果两人同时过桥,所需要的时间就是走得比较慢的那个人单独行动时所需的时间.问题是,如何设计一个方案,让这N人尽快过桥. 输入 第一行是一个整数T(1<=T<=20)表示测试数据的组数每组测

NYOJ45:过河问题【贪心】

过河问题 时间限制:1000 ms  |  内存限制:65535 KB 难度:5 描述 在漆黑的夜里,N位旅行者来到了一座狭窄而且没有护栏的桥边.如果不借助手电筒的话,大家是无论如何也不敢过桥去的.不幸的是,N个人一共只带了一只手电筒,而桥窄得只够让两个人同时过.如果各自单独过桥的话,N人所需要的时间已知:而如果两人同时过桥,所需要的时间就是走得比较慢的那个人单独行动时所需的时间.问题是,如何设计一个方案,让这N人尽快过桥. 输入 第一行是一个整数T(1<=T<=20)表示测试数据的组数 每组