NYOJ47过河问题
来源:互联网 发布:怎么p淘宝的代收货 编辑:程序博客网 时间:2024/05/17 01:57
reference from http://blog.csdn.net/lyhvoyage/article/details/23196933
//NYOJ47过河问题#include<stdio.h>#include<stdlib.h>#include<string.h>#include<iostream>#include <algorithm>using namespace std;int a[1005];int total = 0;void greedySelect(int a[], int N);int main(void){int T, N;//freopen("in.txt", "r", stdin);scanf("%d", &T);while(T--){scanf("%d", &N);for(int i = 0; i < N; i++){scanf("%d", &a[i]);}sort(a, a + N);//默认升序;total = 0;greedySelect(a, N);printf("%d\n", total);}return 0;}void greedySelect(int a[], int n){while(n >= 4){if(2 * a[0] + a[n - 1] + a[n - 2] < a[0] + 2 * a[1] + a[n - 1]){total += a[n - 1];total += a[0];total += a[n - 2];total += a[0];}else{total += a[1];total += a[0];total += a[n - 1];total += a[1];}n = n - 2;}if(n == 1)total += a[0];else if(n == 2)total += a[1];elsetotal += a[2] + a[0] + a[1];}/*a[0]:用时最短; a[1]:用时次短;a[n - 1]:用时最长, a[n - 2]用时次长;(1)有n = 1个人时:直接过河;(2)有n = 2个人时:total = a[1];(3)有n = 3个人时:total = a[2] + a[0] + a[1];(4)有n >= 4个人时:有下面两种方案过河:方案一:用时最短的a[0]和用时最长的a[n - 1]先过河, 用时最短的a[0]回来;然后用时最短的a[0]和用时次长的a[n - 2]过河, 用时最短的a[0]回来;(注意not用时次短的a[1]和用时次长的a[n - 2]过河, 用时次短的a[1]回来)最后就剩下两个人了。a[n - 1] + a[0] + a[n - 2] + a[0] = 2a[0] + a[n - 1] + a[n - 2];方案二:用时最短的a[0]和用时次短的a[1]先过河, 用时最短的a[0]回来;然后用时最长的a[n - 1]和用时次长的a[n - 2]过河, 用时次短的a[1]回来;最后就剩下两个人了。a[1] + a[0] + a[n - 1] + a[1] = a[0] + 2a[1] + a[n - 1]。相当于对(n - 2)个人执行相同的操作,计算比较上面两种方案的结果,取最好的。*/
0 0
- NYOJ47 过河问题
- NYOJ47过河问题
- NYOJ47过河问题
- nyoj47 过河问题
- NYoj47 过河问题
- nyoj47 过河问题
- nyoj47 过河问题
- NYOJ47 过河问题
- NYOJ47 过河问题
- nyoj47过河问题(贪心)
- nyoj47过河问题(贪心)
- 过河问题(贪心)nyoj47
- NYOJ47——过河问题(贪心)
- 贪心算法之 nyoj47过河问题
- 贪心算法之——过河问题(nyoj47)
- nyoj47
- 过河问题
- 过河问题
- C的另类话题
- 数据结构实验之图论二:基于邻接表的广度优先搜索遍历(BFS+前向星)
- 遇见你是一个秘密--牛腩新闻发布系统尾声
- zookeeper原理
- CodeIgniter框架同时连接多个数据库
- NYOJ47过河问题
- 1、Intent和IntentFilter详解
- 1012. 数字分类 (20) (数学啊 ZJU_PAT)
- 解决SQLite数据库中文乱码问题
- Java IO
- UVaLive/LA 6802 Turtle Graphics(水题)
- POJ2484A Funny Game
- 四姐夫还是老样子走到哪里
- 五陈克复笑了笑