题目链接:http://acm.hust.edu.cn/vjudge/contest/122829#problem/A

题目大意:N个人夜里过河,总共只有一盏灯,每次最多过两个人,然后需要有人将灯送回

才能继续过人,每个人过桥都需要耗费一定的时间,让你求耗费的最少时间,并输出过河方案

首先,我们要明白一点,两个人过河肯定比只有一个人过河要来的划算,这样那个速度快的人

就相当于是被带过去的,然后我们从最简单的情况开始分析:(sort(a,a+n))

n=1时,直接过去就可以,t=a[0]

n=2时,两个人直接一起过去,耗时t=a[1]

n=3时,因为肯定要有人送灯回来,肯定是选择跑的最快的a[0]

所以方案是 0,1->0->0,2耗时a[0]+a[1]+a[2]

当n>=4时,我们有两种可能最优方案,

1.全都让a[0]来送,送过去以后送灯回来耗时: a[i]+a[i+1]+2*a[0]

2.0,1->0->i,i+1->1 耗时:a[i+1]+2*a[1]+a[0]

比较选择最优方案

tips:注意输出格式,除了最后一个case,其他都要输出两个换行

代码:

  1. #include <iostream>
  2. #include <cstdio>
  3. #include <algorithm>
  4. #include <cstring>
  5. #include <cmath>
  6. using namespace std;
  7. const int maxn=;
  8. int a[maxn];
  9. int main()
  10. {
  11. int T;
  12. int n;
  13. int i;
  14. scanf("%d",&T);
  15. // printf("\n");
  16. while(T--)
  17. {
  18. scanf("%d",&n);
  19. for(int i=;i<n;i++)
  20. scanf("%d",&a[i]);
  21. sort(a,a+n);
  22. int sum=;
  23. int p=n;
  24. int t;
  25. for(i=n-;i>=;i-=)
  26. {
  27. int t1=*a[]+a[i]+a[i-];
  28. int t2=*a[]+a[]+a[i];
  29. //cout<<t1<<" "<<t2<<endl;
  30. sum+=min(t1,t2);
  31. }
  32. //cout<<sum<<endl;
  33. if(i==) sum+=a[];
  34. else if(i==) sum+=a[];
  35. else sum=sum+a[]+a[]+a[];
  36. printf("%d\n",sum);
  37. for(int i=n-;i>=;i-=)
  38. {
  39. int t1=*a[]+a[i]+a[i-];
  40. int t2=*a[]+a[]+a[i];
  41. if(t1<t2)
  42. {
  43. printf("%d %d\n",a[],a[i]);
  44. printf("%d\n",a[]);
  45. printf("%d %d\n",a[],a[i-]);
  46. printf("%d\n",a[]);
  47. }
  48. else
  49. {
  50. printf("%d %d\n",a[],a[]);
  51. printf("%d\n",a[]);
  52. printf("%d %d\n",a[i-],a[i]);
  53. printf("%d\n",a[]);
  54. }
  55. }
  56. if(i==) printf("%d %d\n",a[],a[]);
  57. else if(i==)
  58. {
  59. printf("%d %d\n",a[],a[]);
  60. printf("%d\n",a[]);
  61. printf("%d %d\n",a[],a[]);
  62. }
  63. else printf("%d\n",a[]);
  64. if(T) cout<<endl;
  65. }
  66. return ;
  67. }

UVA 10037 贪心算法的更多相关文章

  1. 关于贪心算法的经典问题(算法效率 or 动态规划)

    如题,贪心算法隶属于提高算法效率的方法,也常与动态规划的思路相挂钩或一同出现.下面介绍几个经典贪心问题.(参考自刘汝佳著<算法竞赛入门经典>).P.S.下文皆是我一个字一个字敲出来的,绝对 ...

  2. 贪心算法(Greedy Algorithm)

    参考: 五大常用算法之三:贪心算法 算法系列:贪心算法 贪心算法详解 从零开始学贪心算法 一.基本概念: 所谓贪心算法是指,在对问题求解时,总是做出在当前看来是最好的选择.也就是说,不从整体最优上加以 ...

  3. 算法导论----贪心算法,删除k个数,使剩下的数字最小

    先贴问题: 1个n位正整数a,删去其中的k位,得到一个新的正整数b,设计一个贪心算法,对给定的a和k得到最小的b: 一.我的想法:先看例子:a=5476579228:去掉4位,则位数n=10,k=4, ...

  4. LEETCODE —— Best Time to Buy and Sell Stock II [贪心算法]

    Best Time to Buy and Sell Stock II Say you have an array for which the ith element is the price of a ...

  5. ACM_ICPC hdu-2111(简单贪心算法)

    一道非常简单的贪心算法,但是要注意输入的价值是单位体积的价值,并不是这个物品的总价值!#include <iostream> #include <stdio.h> #inclu ...

  6. 基于贪心算法的几类区间覆盖问题 nyoj 12喷水装置(二) nyoj 14会场安排问题

    1)区间完全覆盖问题 问题描述:给定一个长度为m的区间,再给出n条线段的起点和终点(注意这里是闭区间),求最少使用多少条线段可以将整个区间完全覆盖 样例: 区间长度8,可选的覆盖线段[2,6],[1, ...

  7. 增强学习贪心算法与Softmax算法

    (一) 这个算法是基于一个概率来对探索和利用进行折中:每次尝试时,以概率进行探索,即以均匀概率随机选取一个摇臂,以的概率进行利用,即以这个概率选择当前平均奖赏最高的摇臂(如有多个,则随机选取). 其中 ...

  8. 【九度OJ】题目1434贪心算法

    题目 本题的贪心算法策略需要深入思考一下 看到题目,最初没有理解题目的要求:看尽量多的完整的节目.尽量多是指数量多,自己理解成观看的时间最长.这样想其实简化了这道题. 正确理解题意后,首先想到的想法是 ...

  9. 题目1437:To Fill or Not to Fill:贪心算法解决加油站选择问题(未解决)

    //贪心算法解决加油站选择问题 //# include<iostream> # include<stdio.h> using namespace std; # include& ...

随机推荐

  1. js常用 禁止F5 和右键

    document.oncontextmenu = function() {event.returnValue = false;} //右键 document.onkeydown = function( ...

  2. WINDOW下php开启pgsql拓展

    操作步骤: 1.修改php.ini,去掉“extension=php_pgsql.dll ”和“extension=php_pdo_pgsql.dll ”前的分号.2.确认C:\php\ext\下ph ...

  3. 对PHP安全有帮助的一些函数

    安全一直是一个在编程语言中非常值得去关注的方面.在任何一种成熟的编程语言中都有合适的办法来保证程序的安全性,在现代的 WEB 开发中 安全一直是一个在编程语言中非常值得去关注的方面.在任何一种成熟的编 ...

  4. ubuntu profile-environment-bashrc 添加环境变量

    Ubuntu Linux系统环境变量配置文件: /etc/profile : 在登录时,操作系统定制用户环境时使用的第一个文件 ,此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行. ...

  5. ubuntu安装aircrack-ng/reaver/minidwep-gtk用来跑pin

    按照下面安装方法,可以在Ubuntu 13.04中启动 minidwep.Tested with Ubuntu 13.04 1. Dependencies    Code:    sudo apt-g ...

  6. 负电压基准电路(-2.5V/-5V电压基准)

    运算放大器大多数都是双电源的,这就要求有正负基准电压,除了从稳压源直接输出电压外,很多时候都是一个单电源对整个电路供电,这就要求要把正电压转换成负电压,从而产生正负的电压基准,对双电源运算放大器进行供 ...

  7. java IO和NIO的场景选择

    就使用上来说,传统的面向流的IO更简单,而面向缓冲(块)的NIO更复杂,因为可调整空间大,接口的概念性也更加低层(原生)些. 下面说说使用场景: IO的场景: 1.文件可能很多,但是size并不是那么 ...

  8. nginx对比haproxy 的反向代理

    -bash-4.1# ip add | grep inet inet 172.17.0.7/16 scope global eth0 inet6 fe80::42:acff:fe11:7/64 sco ...

  9. Linux中断分层技术

    一.中断嵌套  当系统正在执行某中断处理函数时,又产生了一个新的中断,这就叫做中断嵌套.当中断为慢速中断时,新的中断会取代当前中断,即当前中断没有执行完就结束 了:当中断为快速中断时,新的终端就不会产 ...

  10. FZU2176---easy problem (树链剖分)

    http://acm.fzu.edu.cn/problem.php?pid=2176 Problem 2176 easy problem Accept: 9    Submit: 32Time Lim ...