702:Crossing River (贪心)
【题目描述】
N个人过河,一次过去2个回来一个,给出每个人所需时间,问最小过河时间。
【题目链接】
http://noi.openjudge.cn/ch0406/702/
【算法】
一开始想样例是怎么成立的想了半天,因为一开始以为贪心策略就是最小的人陪每个人过去然后回来,这样子的话样例应该是19。样例:4个人,时间分别为:1 2 5 10。最少时间为17。策略是最小和次小先过去,然后最小回来,最大和次大过去,次小回来,然后最小次小再过去结束。然后按这种策略写wa了,没办法。查了一波题解,发现两种策略去最小。。。。晕。因为假设递增的a,b,c,d四个人,两种策略所需时间分别为:2*b+a+d+b和a*2+c+d+b,消去相同项为2*b和a+c,所以每次取两者最小就行了(第二种策略很容易构造出数据: 1 99 100 1000)。当然在剩三个人的情况下,两种策略用时相同都是a+b+c。
【代码】
1 #include <bits/stdc++.h> 2 using namespace std; 3 int t,n,i,ans; 4 int a[1010]; 5 int main() 6 { 7 scanf("%d",&t); 8 while(t--) { 9 ans=0; 10 scanf("%d",&n); 11 for(i=1;i<=n;i++) scanf("%d",&a[i]); 12 if(n==1) { printf("%d\n",a[1]); continue; } 13 sort(a+1,a+n+1); 14 for(i=n;i>3;i-=2) 15 ans+=min(a[1]+2*a[2]+a[i],a[1]*2+a[i]+a[i-1]); 16 if(n&1) ans+=a[1]+a[2]+a[3]; 17 else ans+=a[2]; 18 printf("%d\n",ans); 19 } 20 return 0; 21 }
转载于:https://www.cnblogs.com/Willendless/p/9356820.html
702:Crossing River (贪心)相关推荐
- 信息学奥赛一本通 1232:Crossing River | OpenJudge NOI 4.6 702:Crossing River
[题目链接] ybt 1232:Crossing River OpenJudge NOI 4.6 702:Crossing River 一本通里的翻译不够完整,OpenJudge中的英文原题中有对数据 ...
- 信息学奥赛第十节 —— 贪心算法(渡河问题POJ 1700 Crossing River + 拦截导弹的系统数量求解)
复习概念 贪心算法又叫贪婪算法,是指在对问题求解时,总是做出在当前看来是最好的选择.也就是说,贪心算法不从整体最优上加以考虑,它所做出的是在某种意义上的局部最优解. 无后效性:贪心算法不是对所有问题都 ...
- 信息学奥赛一本通(1232:Crossing River)
1232:Crossing River 时间限制: 1000 ms 内存限制: 65536 KB 提交数: 6415 通过数: 2761 [题目描述] 几个人过河,每次过两人一 ...
- 贪心算法-crossing river
/**/ #include <iostream> #include<algorithm> using namespace std; int calc1(int *a,int n ...
- Crossing River / 过河问题(贪心)
描述 几个人划船过河,每次过两人过河后需要一人返回,速度由慢者决定,问过河所需最短时间. 输入描述 输入t组数据,每组数据第1行输入n,第2行输入n个数,表示每个人过河的时间(1≤t≤20,1≤n≤1 ...
- Crossing River
[题目描述] 几个人过河,每次过两人一人回,速度由慢者决定,问过河所需最短时间. [输入] 输入t组数据,每组数据第1行输入n,第2行输入n个数,表示每个人过河的时间. [输出] 输出t行数据,每行1 ...
- 1700 Crossing River
题目链接: http://poj.org/problem?id=1700 1. 当1个人时: 直接过河 t[0]. 2. 当2个人时: 时间为较慢的那个 t[1]. 3. 当3个人时: 时间为 t[0 ...
- Crossing River(信息学奥赛一本通-T1232)
[题目描述] 几个人过河,每次过两人一人回,速度由慢者决定,问过河所需最短时间. [输入] 输入t组数据,每组数据第1行输入n,第2行输入n个数,表示每个人过河的时间. [输出] 输出t行数据,每行1 ...
- 1232:Crossing River
[题目描述] 几个人过河,每次过两人一人回,速度由慢者决定,问过河所需最短时间. [输入] 输入t组数据,每组数据第1行输入n,第2行输入n个数,表示每个人过河的时间. [输出] 输出t行数据,每行1 ...
最新文章
- Top 10国际大厂人工智能岗位经典面试题精选
- matlab中的rem和mod,matlab的rem()和mod()函数
- C#几种访问修饰符理解
- Linux下添加普通帐号
- easyui数据请求两个url_jQuery Easyui datagrid连续发送两次请求问题
- netduino之电源参考电路MC33269DT-5.0G
- FreeEIM 来点新知识iOS UIScrollView详解
- Java读写Excel之POI超入门(转)
- 目录:所以文章的目录
- java常用的空对象 null
- ICCV 2015 揭开152层神经网络的面纱
- win10系统安装提示带有gui的服务器,安装win10提示“由于技术员系统中无接入音频设备,要启动GUI”如何...
- 员工新参(北京)社保所需材料
- 【论文】(COPRA)Finding overlapping communities in networks by label propagation
- adb shell wm 命令使用
- JAVA-操作excel模版进行写入
- 聊聊最简单的名词:频率
- 打响散煤治理的蓝天保卫战 ——民用“洁净型煤+环保炉具”的发展
- 在虚拟机VMware中使用手机热点或WIFI设置网络
- 3dmip12小时内无法注册_国内用户将无法再注册Steam新账号