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-14 18:05:50

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 过河 过河问题 【贪心】

经典贪心: 两种方案:一:让最快的和次最快的先过去,最快的回来,然后最慢的和次最慢的过去,次最快的回来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

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]是最大的时间,下面一样, 第二

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

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

ArcIMS4.0 for windows IIS + ServletsExec安装全记录(3)

http://weibo.com/49768-72-00204-9858=597p/1001604190563451699827珊跃烦挠改QNY吠罩没谡 http://weibo.com/76812-42-76205-1618=550p/1001604190563468453032丫锰檀釉潦UBK嗽甘诓咐 http://weibo.com/72252-15-88210-3506=819p/1001604190563502031987戎剐释才垦RNP辞衙称傧 http://weibo.com/93

NYOJ 679 贪婪的商店

贪婪的商店 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述 小明星期天去一家商店买东西,看上了一个玩具,非常想买下来.但是这家商店有这样一个规定,如果要买一件物品A,可能必须要另一件物品B.而要买物品B,可能必须要买另一件物品C.直到买的这件物品不需要买其他物品为止. 经过顾客抗议,商店重新决定如果买一件物品,所需要买其他物品超过一件的话,可以买其中任一件就好.小明钱不多了,他想知道如果要买这件物品,最少要花多少钱. 输入 第一行包含一个整数T(T <= 100).

所谓的日常 #7 - 袁紹磐河戰公孫 孫堅跨江擊劉表

div.2 CodeForces 334A Candy Bags 给定一个偶数n(<=100),把价值为1~n^2的糖们分发给n个小朋友,使得大家手上糖的总价值一样. 考虑这样配对:(1,n^2),(2,n^2-1),(3,n^2-2)...(i,n^2-i+1).每对价值和都是n^2+1,总共有n^2/2对,按对分给小朋友就好啦. 1 #include <stdio.h> 2 3 int main() { 4 int n; 5 scanf("%d",&n);