【UVA - 10037】Bridge(过河问题,经典贪心)

题干:

题目大意:

有N个人要过桥,每个人速度不同,只有一个手电筒,每次最多只能过去两个人,问所有人最短的过桥时间为多少

解题报告:

  首先让最快的两个人最后过,然后我们分奇偶考虑,分别处理到剩下三个人和两个人的情况。然后在做最后的处理。

  除了最后的处理(其实是最先执行的步骤),我们看其他的步骤,现在最快的俩人都在对岸。

   现在两种贪心策略:(一个回合就处理两个人,每个回合把当前速度最慢的两个人带到河岸)

      1.最快速度的人每次带一个当前速度最慢的人过去,自己返回;再带一个当前速度最慢的人过去, 再返回(也就是这俩最慢的都让最快的带回来)

      2.最快速度的人和速度第二快的人一起过去;最快速的人返回,速度最慢的两个人一起过去;速度第二快的人返回。

    对于每一个回合,我们去这两种策略中的较小值,,贪心即可得到答案。

         

AC代码:

//该死的格式错误怎么不提示PE了??怎么成WA了????
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<queue>
#include<map>
#include<vector>
#include<set>
#include<string>
#include<cmath>
#include<cstring>
#define ll long long
#define pb push_back
#define pm make_pair
#define fi first
#define se second
using namespace std;
const int MAX = 2e5 + 5;
int a[MAX];
int main()
{int t,n;cin>>t;while(t--) {int ans = 0;scanf("%d",&n);for(int i = 1; i<=n; i++) scanf("%d",a+i);sort(a+1,a+n+1);if(n == 1) {printf("%d\n%d\n",a[1],a[1]);if(t) puts("");continue;}if(n == 2) {printf("%d\n%d %d\n",a[2],a[1],a[2]);if(t) puts("");continue;}int res,time=0;if(n%2==1) res=3;else res=2;for(int i = n; i>res; i-=2) {ans += a[1]+a[i];//先跑过去 if(a[2]*2<a[i-1]+a[1]) ans += a[2] + a[2];else ans += a[i-1]+a[1];}if(n%2 == 1) ans += a[1]+a[2]+a[3];else ans += a[2];printf("%d\n",ans);if(n == 3) {printf("%d %d\n%d\n",a[1],a[2],a[1]);printf("%d %d\n",a[1],a[3]);if(t) puts("");continue;}for(int i = n; i>res; i-=2) {if(a[2]*2 < a[i-1]+a[1]) {printf("%d %d\n%d\n", a[1], a[2], a[1]);printf("%d %d\n%d\n", a[i-1], a[i], a[2]);}else {printf("%d %d\n%d\n", a[1], a[i-1], a[1]);printf("%d %d\n%d\n", a[1], a[i], a[1]);}}if(n%2==1) {printf("%d %d\n%d\n", a[1], a[2], a[1]);printf("%d %d\n", a[1], a[3]);}else printf("%d %d\n",a[1],a[2]);if(t) puts("");} return 0 ;}

  就像学长说的,这题重要的是这个贪心的思路,可以构造出很多不同的题型:比如学长讲课时说的,可以和置换群建立起关系。比如构造一个题:

     给你n个数(数值保证从1~n 且互不相同),先定义一种操作:可以任选两个元素进行交换,交换的代价是这两个元素值的和。现在问你如果我要吧这个序列变成一个有序序列,最小的代价是多少。

   首先我们知道,我们要找一些轮换,然后这一些轮换对调就可以了,根据置换群的知识,我们知道可以把这些对调换成一个个的对换去完成,并且如果这一个轮换涉及k个元素的话,我们需要对换k-1次,那么既然次数确定,并且需要有一个作为每次都出现的(详情见离散数学),那我们就贪心那个最小的作为每一次对换都出现的元素,,这一点并不难想。。但是有没有可能有更优的选择?比如我们(100,102,104,103,105,106,107,108)这有八个元素组成一个轮换的话(顺序是我瞎写的)那我们肯定选100当那个每次都出现在对换中的元素,,但是我们想,有没有可能把另外一个最小的元素换过来当成最小的元素,换完了以后再换回去呢?比如还有一个轮换(1,2,3),那么我们先1和100对调,然后再用1去做那7次对换,然后再把1和100调回去,这样代价肯定小了很多啊、、这里仅提供思路,,具体题目遇到再说、

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/441014.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux系统键盘记录器,可截获到 QQ 密码 键盘记录器源码

由于 QQ 密码做了特殊的保护&#xff0c;所以通过远程注入得到密码框内容以及通过钩子来得到键盘消息均不能探测到 QQ 的密码&#xff0c;但是通过对键盘驱动的过滤却是可以记录下 QQ 密码输入期间的内容&#xff0c;附上源码。#define DBG 1#include #include #include "…

【牛客 - 2B】树(思维,dp,有坑)

题干&#xff1a; shy有一颗树&#xff0c;树有n个结点。有k种不同颜色的染料给树染色。一个染色方案是合法的&#xff0c;当且仅当对于所有相同颜色的点对(x,y)&#xff0c;x到y的路径上的所有点的颜色都要与x和y相同。请统计方案数。 输入描述: 第一行两个整数n&#xf…

linux安装后启动mysql,linux安装完mysql后启动错误

redhat as 4,使用rpm包安装完mysql的server 跟client后执行以下命令出错。[rootftp etc]# /usr/bin/mysqladmin -u root password new-password/usr/bin/mysqladmin: connect to server at localhost failederror: Cant connect to local MySQL server through socket /var/lib…

linux exchange邮件客户端,Linux中使用Hiri邮件客户端访问Exchange帐户

大家都知道 Microsoft Exchange 是企业级邮件市场占有率第一的产品&#xff0c;早已成为 Top 500 企业首选的邮件服务器和客户端标准配备。随着 Office 365 服务在全球的铺开&#xff0c;Exchange 的市场占有率更是越来越高&#xff0c;不少中小企业甚至个人用户都已经开始使用…

【CodeForces - 1084C】The Fair Nut and String(思维,组合数学)

题干&#xff1a; The Fair Nut found a string ss. The string consists of lowercase Latin letters. The Nut is a curious guy, so he wants to find the number of strictly increasing sequences p1,p2,…,pkp1,p2,…,pk, such that: For each ii (1≤i≤k1≤i≤k), sp…

群辉挂载linux nfs,Debian 9 挂载访问已设置的群晖NFS共享文件目录

说明博主先后尝试了 webdav、Samba方案后&#xff0c;最后毅然决然选择NFS的方案&#xff0c;通过挂载群晖的NFS共享文件目录作为Jellyfin的媒体库&#xff0c;媒体播放通常单个文件都比较大&#xff0c;而webdav在读取过程中需要比较长的缓存时间大文件传输并不友好。之前试过…

【牛客 - 289H】约会(思维,数学,奇偶数,水题)

题干&#xff1a; Hang等了一年&#xff0c;终于&#xff0c;朝气蓬勃的小学妹来了&#xff0c;在开学当天&#xff0c;就成功打入协会迎新群&#xff0c;在Hang的魅力&#xff08;死皮赖脸&#xff09;之下&#xff0c;有个小学妹要和他面基了&#xff0c;小学妹说&#xf…

c语言中调试时go的作用,C语言调用GO

C语言调用GO最近工作中遇到需要在c语言里面调用go语言的需求&#xff0c;总结了一下&#xff0c;下面代码里面的每一个注释都很有用&#xff0c;闲话不多说&#xff0c;直接上代码~示例GO代码&#xff1a;package main // 这个文件一定要在main包下面import "C" // 这…

【CodeForces - 768C】Jon Snow and his Favourite Number(思维,技巧,套路,数学异或,循环节,trick)

题干&#xff1a; Jon Snow now has to fight with White Walkers. He has n rangers, each of which has his own strength. Also Jon Snow has his favourite number x. Each ranger can fight with a white walker only if the strength of the white walker equals his st…

C语言第六次作业指针,c语言第六次作业解析

《c语言第六次作业解析》由会员分享&#xff0c;可在线阅读&#xff0c;更多相关《c语言第六次作业解析(36页珍藏版)》请在人人文库网上搜索。1、c 语言第六次作业解析第六次作业&#xff1a;指针(以下题目如无特殊声明&#xff0c; 请使用指针技术实现 , 尽量不要使用数组作为…

【HDU - 1069】Monkey and Banana (最长下降子序列 + 贪心,最长上升子序列类问题)

题干&#xff1a; A group of researchers are designing an experiment to test the IQ of a monkey. They will hang a banana at the roof of a building, and at the mean time, provide the monkey with some blocks. If the monkey is clever enough, it shall be able …

c 语言定义2维字符串数组赋值,二维数组赋值字符串 c 语言 二维字符串数组赋值问题...

C语言中二维字符数组应该怎样赋值&#xff1f;c语言二维数组如何定义字符串&#xff1f;&#xff1f;&#xff1f;&#xff1f;急。。。二维字符数组的定义格式为&#xff1a;char 数组名[第一维大小][第二维大小]; 例如&#xff1a;char c[3][10]; //定义了一个3行10列的二维字…

【牛客 - 297D】little w and Exchange(上下界贪心)

题干&#xff1a; 旅行到K国的小w发现K国有着很多物美价廉的商品&#xff0c;他想要买一些商品。 结果一掏钱包&#xff0c;包里只剩下n张K国的纸币了&#xff0c;说起来也奇怪&#xff0c;K国纸币并不像其他国家一样都是1元&#xff0c;5元&#xff0c;10元…而是各种奇怪的…

c语言程序设计 doc,《C语言程序设计》.doc

《C语言程序设计》.doc《C语言程序设计》实验 编实验一 C程序的运行环境和运行C程序的方法2实验二 数据类型、运算符和表达式9实验三 最简单的C程序设计14实验四 逻辑结构程序设计20实验五 循环结构程序设计26实验六 数组31实验七 函数39实验八 编译预处理命令45实验九 指针50…

【牛客 - 315F】美丽的项链(线性dp,递推,我为人人)

题干&#xff1a; 妞妞参加了Nowcoder Girl女生编程挑战赛, 但是很遗憾, 她没能得到她最喜欢的黑天鹅水晶项链。 于是妞妞决定自己来制作一条美丽的项链。一条美丽的项链需要满足以下条件: 1、需要使用n种特定的水晶宝珠 2、第i种水晶宝珠的数量不能少于li颗, 也不能多于…

撞球编程c语言,急!C语言编程题——撞球

满意答案#include #include #include int main(){double length,wide,x0,y0,x1,y1;int i;char towards[1500];while(1){memset(towards,0,sizeof(towards));if(scanf("%lf %lf",&wide,&length)EOF)break;scanf("%lf %lf",&x0,&y0);scanf(&…

【牛客 - 315C】排列(思维,贪心,同优则立证明法)

题干&#xff1a; 妞妞得到一个(1~n)的排列p1, p2, p3,...,pn, 听村里的老人牛牛说如果让这个排列变为: 对于所有的1 < i < n, 都满足pi ≠ i, 就可以获得Google Girl Hackathon的入场券。 妞妞仅允许的操作是: 交换排列中两个相邻的元素, 并且妞妞允许做这个操作任意…

镇江 linux技术支持,东云镇江服务器

弹性云服务器 ECS弹性云服务器(Elastic Cloud Server)是一种可随时自助获取、可弹性伸缩的云服务器&#xff0c;帮助用户打造可靠、安全、灵活、高效的应用环境&#xff0c;确保服务持久稳定运行&#xff0c;提升运维效率三年低至5折&#xff0c;多种配置可选了解详情什么是弹性…

*【牛客 - 315D】打车(贪心,同优则立证明法)

题干&#xff1a; 妞妞参加完Google Girl Hackathon之后,打车回到了牛家庄。 妞妞需要支付给出租车司机车费s元。妞妞身上一共有n个硬币&#xff0c;第i个硬币价值为p[i]元。 妞妞想选择尽量多的硬币&#xff0c;使其总价值足以支付s元车费(即大于等于s)。 但是如果从妞妞…

c语言中只能逐个引用6,C语言前面六个练习.doc

C语言前面六个练习第一章 C语言基础知识4&#xff0e;一个函数的函数体可以没有变量定义和执行部分&#xff0c;函数可以是空函数2&#xff0e;一个函数由两部分组成&#xff0c;它们是 函数体 和 函数的说明部分。3&#xff0e;函数体的范围是 大括号以内 。(0级)4&#xff0e…