51NOD 1125(交换机器最小代价) (贪心) 思想 !思想!

题目链接: https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1125


1125 交换机器的最小代价
基准时间限制:1 秒 空间限制:131072 KB 分值: 80 难度:5级算法题
 收藏
 关注
有N台机器重量各不相等,现在要求把这些机器按照重量排序,重量从左到右依次递增。移动机器只能做交换操作,但交换机器要花费一定的费用,费用的大小就是交换机器重量的和。例如:3 2 1,交换1 3后为递增排序,总的交换代价为4。给出N台机器的重量,求将所有机器变为有序的最小代价。(机器的重量均为正整数)
Input
第1行:1个数N,表示机器及房间的数量。(2 <= N <= 50000)
第2 - N + 1行:每行1个数,表示机器的重量Wi。(1 <= Wi <= 10^9)
Output
输出最小代价。
Input示例
3
3
2
1
Output示例
4


首先  数据量 并不弱, 5w*10^9 因此  必然要用 long long  第一次没


写 过了13组 第二次 成员没用 longlong 过了18组   - .  -  



题目大意:   既然是交换顺序;  

有两种思路:

 在所有的 数据当中,  我们把几个有关联(这几个数交换得到正确位置)的数据放到一起,  组成一个小组,  这样 所有数据, 就分成了 好几个组   , 

然后 我们 在对每一个组扫描的时候, 每次只会影响到当前这个数所在的小组,对其他小组不会造成影响,  因此对于每一个小组

有两种操作实现方式,:

 一个是 直接小组内成员交换, 另一个就是,我们借助另外一个特殊值,用特殊值依次实现交换,(这个值是特殊值,为了使重量最小, 所以这个特殊值必须是 全部数据中 最小的那个) 然后 两种方式比较 选择当前小组 中 最合适的方法;


 一是  用当前组下 小组内成员进行交换;

 二是  借助外力实现, 依次交换;







每次 我们选择 两个中最小的方法 比较  并且要注意;  方法二中; 腾位子的 要多交换两次; for 循环的目的,就是为了解决 多组的问题;

 

#include <iostream>
#include <queue>
#include <string>
#include <cstring>
#include <cmath>
#include <stdio.h>
#include <algorithm>typedef long long ll;using namespace std;
const int MAXN=50100;
struct mac{ll we;ll col;//位置} a[MAXN];int n;int vis[MAXN];ll pre;
int cmp(mac a,mac b)
{return a.we<b.we;
}
ll change(int i)// 当前状态下最小换的
{ll sum=0;ll x,y,cont=0;x=a[i].we;y=a[i].col;while(i!=y){sum+=a[y].we;vis[y]=1;y=a[y].col;cont++;}sum=sum+min((cont*x),(pre*(cont+2)+x*2));return sum;
}
int main()
{int i,j;while(cin>>n){memset(a,0,sizeof(a));memset(vis,0,sizeof(vis));for(i=1;i<=n;i++){cin>>a[i].we;a[i].col=i;}sort(a+1,a+n+1,cmp);ll sum=0;pre=a[1].we;for(i=1;i<=n;i++){if(!vis[i]){vis[i]=1;sum+=change(i);}}cout<<sum<<endl;}return 0;
}



123

转载于:https://www.cnblogs.com/sizaif/p/9078532.html

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

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

相关文章

《Python从小白到大牛》简介

《Python从小白到大牛》已经上市&#xff01; 本书是一部系统论述Python编程语言、OOP编程思想以及函数式编程思想的立体化教程&#xff08;含纸质图书、电子书、教学课件、源代码与视频教程&#xff09;。为便于读者高效学习&#xff0c;快速掌握Python编程方法。本书作者精心…

c语言基础知识_结构体访问,共同体,枚举类型

C语言结构体变量的引用&#xff1a;对于定义的结构体类型的普通变量&#xff0c;访问其成员用圆点运算符&#xff08;“.”&#xff09;&#xff0c;标准访问方式如下&#xff1a;   结构体变量名.成员名   对于定义为指向结构体的指针变量&#xff0c;用箭头运算符&#x…

Wiener Filter维纳滤波器halcon算子,持续更新

目录gen_psf_defocusgen_psf_motionsimulate_defocussimulate_motionwiener_filterwiener_filter_nigen_psf_defocus 功能&#xff1a;产生一个均匀散焦模糊的脉冲相应。 gen_psf_motion 功能&#xff1a;产生一个&#xff08;线性&#xff09;运动模糊的脉冲相应。 simula…

【转载】数据库操作:添加、插入、更新语句

原始日期&#xff1a; 2016-07-22 12:03 SQL常用命令使用方法&#xff1a;(1) 数据记录筛选&#xff1a;sql"select * from 数据表 where 字段名字段值 order by 字段名 [desc]"sql"select * from 数据表 where 字段名 like %字段值% order by 字段名 [desc]&qu…

webpack学习

全局安装安装webapck npm i webpack -g 现在我们就可以全局的使用webpack命令了 webpack中基础的命令&#xff1a; webpack enter.js output.js --watch 这个命令是将enter.js打包成output.js&#xff0c;然后html只需要引用该文件就可以了看如下entry.js,这是简单的js代码。 /…

3D 相机halcon算子,持续更新

目录add_scene_3d_cameraadd_scene_3d_instanceadd_scene_3d_labeladd_scene_3d_lightclear_scene_3dcreate_scene_3ddisplay_scene_3dget_display_scene_3d_inforemove_scene_3d_cameraremove_scene_3d_instanceremove_scene_3d_labelremove_scene_3d_lightrender_scene_3dset…

Selenium 中文API

Selenium 中文API 转自&#xff1a;http://blog.csdn.net/lh9529/article/details/3946567 概念 Selenium 通过命令进行驱动。Selenium 可归纳为三种“风格”&#xff1a;动作、辅助和断言。每一个命令调用就是下表中的一行。 命令 目标 值 动作(Actions)命令一般用于操作应用…

C# 特性(Attribute)

个人定义&#xff1a;不侵入对象的情况下&#xff0c;添加对象附注信息。 官方定义&#xff1a;将预定义的系统信息或用户定义的自定义信息与目标元素相关联。目标元素可以是程序集、类、构造函数、委托、枚举、事件、字段、接口、方法、可移植可执行文件模 块、参数、属性 (…

收集js库的网站

https://www.javascripting.com/view/redux

c语言中有关void,sizeof,结构体的一些问题

void[1]&#xff1a;void是C语言中的空类型&#xff0c;void的用途有二。 1、对函数返回的限定&#xff1b; 如果函数没有返回值&#xff0c;则默认返回整数类型&#xff0c;而不是void类型。c有很严格的类型&#xff0c;不允许函数不加类型声明&#xff0c;而编译器则不这么认…

Drawing绘图halcon算子,持续更新

目录drag_region1drag_region2drag_region3draw_circledraw_circle_moddraw_ellipsedraw_ellipse_mod_draw_linedraw_line_moddraw_nurbsdraw_nurbs_interpdraw_nurbs_interp_moddraw_nurbs_moddraw_pointdraw_point_moddraw_polygondraw_rectangle1draw_rectangle1_moddraw_re…

搞明白这八个问题,Linux系统就好学多了

正在犹豫入坑Linux学习的同学或者已经入坑的同学&#xff0c;经常会问到这样八个问题。今天&#xff0c;这些问题我都会一一解答&#xff0c;希望我的看法能帮助各位同学。常言道“好的开始是成功的一半”&#xff0c;如果你明白了以下八个问题&#xff0c;就能有一个很好的开始…

从ORA-27300,ORA-27301到ORA-00064

近期因为session数量添加&#xff0c;须要调整session&#xff0c;也就是要调整process參数。看是比較简单的一个问题&#xff0c;却遭遇了ORA-27300&#xff0c;ORA-27301。因为这个涉及到了有关内核參数kernel.sem的改动。以下是其详细描写叙述。1、故障现象OS版本号&#xf…

Halcon|读取3D相机点云数据

Halcon|读取3D相机点云数据 最近发现很多小伙伴在使用Halcon处理3D工业相机扫描结果的时候遇到了“如何读取”的问题。一般的3D工业相机储存数据的格式有txt格式、tif格式、csv格式、ply格式、ptx格式、bin格式、obj格式等。 txt格式 读取txt文件生成3D模型一般需要分析txt文件…

FFMPEG解码流程

1. 注册所有容器格式和CODEC: av_register_all() 2. 打开文件: av_open_input_file() 3. 从文件中提取流信息: av_find_stream_info() 4. 穷举所有的流&#xff0c;查找其中种类为CODEC_TYPE_VIDEO 5. 查找对应的解码器: avcodec_find_decoder() 6. 打开编解码器: avcodec_open…

linux用户登录指定目录

一、创建用户和用户组 [rootweb4 lianyu]# groupadd lianyu [rootweb4 lianyu]# useradd lianyu -g lianyu [rootweb4 lianyu]# passwd lianyu二、用户登录指定目录 [rootweb4 lianyu]# cd /home/lianyu [rootweb4 lianyu]# ls -a . .. .bash_history .bash_logout .bas…

转载:说一下AI的前景吧

发信人: wdong (万事休), 信区: Stock标 题: 说一下AI的前景吧这一波AI和前两年的big data&#xff0c;根本就是两回事。big data这一波&#xff0c;主要是用数据分析来支撑起各种现有系统的改进&#xff0c;包括销售业绩的提高和用户体验的提高等。AI当然也可以应用回这些领域…

药片粘连物体的分割

药片粘连物体的分割要求&#xff1a;图片&#xff1a;处理程序&#xff1a;处理结果&#xff1a;要求&#xff1a; 将药片分割&#xff0c;统计药片数量。不能使用模板匹配。 图片&#xff1a; 先看一下要处理的原图&#xff1a; 处理程序&#xff1a; read_image (Image…

FFMPEG CODEC使用总结

分类&#xff1a; 视频编解码技术 2010-07-15 10:29 283人阅读 评论(0) 收藏 举报 ffmpeg里提供了很多的encoder&#xff0c;decoder&#xff0c;详见avcodec.h里的枚举变量CodecID。 宏定义 #define REGISTER_ENCODER(X,x) { / extern AVCodec x##_encoder; / …

java 链接mysql 产生500W数据模拟生成环境

java 插入数据到mysql 通过sqoop 导入到hive 中&#xff0c;kylin模拟见cube 时间和 数据膨胀率 kylin 数据插入到 HBase Kylin HBase 1.1.3 Hive 1.2.1 Hadoop 2.5.1 create table infoagetime( prod_name char(10), prod_id SMALLINT, ods_date DATE )数据格式 oPmgBZxldW …