1125 交换机器的最小代价

51nod1125 交换机器的最小代价 贪心 1125 交换机器的最小代价 基准时间限制:1 秒 空间限制:131072 KB 分值: 80 难度:5级算法题  收藏  关注 有N台机器重量各不相等,现在要求把这些机器按照重量排序,重量从左到右依次递增。移动机器只能做交换操作,但交换机器要花费一定的费用,费用的大小就是交换机器重量的和。例如:3 2 1,交换1 3后为递增排序,总的交换代价为 阅读详情
基准时间限制: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
李陶冶  (题目提供者)
C++的运行时限为:1000 ms ,空间限制为:131072 KB  示例及语言说明请按这里

题解:此题是有关置换群的内容。
1,在置换群里若有t个元素,则至少交换t-1次可以至想要的递增序列(递减序列);
2,据此题要交换代价最小,那么必须以最小的数为媒介进行交换。
3,设在置换群里t-1个元素和为sum1(就是除去了置换群中最小的数minx其他元素的和),
t个元素的和为sum,整个数列中最小的数为mins,
以置换群中最小的数minx为媒介时,要交换t-1次,说明其他t-1个元素各交换一次,
minx交换t-1次,则代价为sum1+(t-1)*minx=>sum+(t-2)*minx;
以整个数列中最小数mins为媒介时(此时置换群最小的数不是整个数列中最小的),
本就有t个元素,所以要交换t次,说明其他t个元素各交换一次,mins交换t次,
但mins不是置换群里的,所以还要交换回去,因此代价还要加mins+minx, 
则代价为sum+t*mins+mins+minx=>sum+(t+1)*mins+minx;
4,若还感觉有点不明白过程,我就举个列子,给大家模拟一遍。
eg:  7 5 2 4 6 8 1 3  a(原序列,为了方便,我将原序列命名为a,排完序的序列b)
排序后 :1 2 3 4 5 6 7 8  b
置换群有
       :7-1
        : 5-2-3-8-6
        : 4
现在以第二个置换群的最小值2为媒介对本置换群元素进行交换:
7 5 2 4  6 8 1 3(原序列,为了方便,我将原序列命名为a,排完序的序列b)
7 5 3 4 6 8 1 2 a的2下面是b的3,交换2,3; 注意:并排的序列是交换完的序列(以下类同) 
7 5 3 4 6 2 1 8  a的2下面是b的8,交换2,8 ;
7 5 3 4  2 6 1 8  a的2下面是b的6 , 交换2,6;
7 2 3 4 5 6 1 8  a的2下面是b的5,交换2,5;
第二个置换群元素都交换完毕,显然交换了4次,t本就为5,在此开来有t个元素的交换群,
至少交换t-1(其实你可以交换更多次,但没那个必要);
再交换第一个置换群的元素1,7
1 2 3 4 5 6 7 8 所有的交换完毕。

我又将1,2交换,模拟第二种代价的交换过程,其实是类似,所以就从略些;
7 5  2   4   6 8 1 3
7 5 1 4 6 8 2 3
7 5 3 4 6 821
7 5 3 4 6 1   2  8
7 5 3 41 62 8
7 1 3 4 5 6 2 8
7 2 3 4 5 6 1 8 再换回1,2,这就是为什么要在第二种的代价后再加mins+minx的原因。
1 2 3 4 5 6 7 8
由于mins+minx大小不确定,所以才比较第一种代价sum+(t-2)*minx和
第二种代价sum+(t+1)*mins+minx谁更小,就选谁。
就是说,若以mins为minx得到的代价sum+(t-2)*mins肯定小于等于sum+(t-2)*minx,
但交换mins和minx也需要代价x,所以sum+(t-2)*mins+x=>sum+(t+1)*mins+minx与
sum+(t-2)*minx大小就不确定了,进一步看谁更小,就选谁。
具体代码如下:
#include <bits/stdc++.h>
#define LL long long
using namespace std;
struct node
{
    LL va;
    int id;
};
bool cmp (node a,node b)
{
    return a.va<b.va;
}
int main ()
{
    int n;
    node w[50005];
    LL mins=9999999,minx=9999999,a[50005];  //mins为整个数列中最小的,minx为当前置换群中最小的。
    LL sum=0;
    cin>>n;
    for (int i=0;i<n;i++)
    {
        scanf("%lld",&a[i]);
        w[i].va=a[i];
        w[i].id=i;
        sum+=a[i];
        mins=min(mins,a[i]);
    }


    sort(w,w+n,cmp);
    int f[50005]={0};
    for (int i=0;i<n;i++)
    {
        if(!f[i])
        {
            int j=i;
            int t=0;
            minx=a[j];
            while(!f[j])
            {
                t++;
                f[j]=1;
                minx=min(a[j],minx);
                j=w[j].id;//通过id去寻找置换群里的下一个元素
            }
            sum+=min((t-2)*minx,(t+1)*mins+minx);//比较这两种代价谁更小则选谁。
        }
    }
    printf("%lld",sum);
    return 0;
}
类似: poj Cow Sorting 3270(同一代码可以AC)

实用工具系列 - Xshell安装下载与使用 一、介绍 二、下载 三、安装 四、使用 阅读详情

相关推荐

STM32F103C8T6实战:手把手教你搭建智能火灾报警系统(附MQ-2传感器调试技巧)

本文详细介绍了基于STM32F103C8T6单片机和MQ-2烟雾传感器的智能火灾报警系统搭建过程。从硬件选型、电路设计到软件开发,提供全面的实战指导,特别包含MQ-2传感器调试技巧,帮助开发者快速实现稳定可靠的智能火灾监控系统。

year5的博客 213

51nod1125 交换机器的最小代价

题目 题解 标程: #include&amp;lt;bits/stdc++.h&amp;gt; using namespace std; typedef long long ll; const int N=50003; struct kk{ int x,id; }a[N]; ll ans,mn; int n,i,vis[N]; bool cmp(kk x,kk y){ return x.x&amp;...

xumingyang0的博客 297

别再手动挂载NPU了!手把手教你用Ascend-Docker-Runtime一键启动昇腾AI容器

本文详细介绍了如何使用Ascend-Docker-Runtime一键启动昇腾AI容器,大幅简化NPU设备挂载流程。通过环境变量ASCEND_VISIBLE_DEVICES,开发者可以灵活指定NPU设备,提升开发效率。文章还提供了安装配置指南、高级使用技巧和常见问题排查方法,帮助开发者快速掌握这一高效工具。

weixin_42662605的博客 253

小朋友学算法(18):交换机器的最小代价

一、问题描述 有N台机器重量各不相等,现在要求把这些机器按照重量排序,重量从左到右依次递增。移动机器只能做交换操作,但交换机器要花费一定的费用,费用的大小就是交换机器重量的和。例如:3 2 1,交换1 3后为递增排序,总的交换代价为4。 给出N台机器的重量,求将所有机器变为有序的最小代价(机器的重量均为正整数)。 输入 第1行:1个数N,表示机器及房间的数量。(2 <= N <= 50...

小树学信奥 591

Revit二次开发——不启动Revit,做rvt文件数据导出

Revit二次开发——不启动Revit,做rvt文件数据导出Node.js部分调用C#端供外部调用的dllC#部分调用RevitNet.dll,做数据导出exe做外部调用dll总结功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 N

Y.Jerome的专栏 4112

解决Docker拉取镜像报错:Get https://registry-1.docker.io/v2/: 报错

解决Docker拉取镜像报错: Get “https://registry-1.docker.io/v2/”: net/http: request canceled while waiting for connection问题描述Get "https://registry-1.docker.io/v2/"是docker官方的镜像源,下载很慢的,一般会自己指定国内映射的加速镜像源。

qq_33650333的博客 4173

51Nod - 1125 交换机器的最小代价(贪心,思路)

描述 有N台机器重量各不相等,现在要求把这些机器按照重量排序,重量从左到右依次递增。移动机器只能做交换操作,但交换机器要花费一定的费用,费用的大小就是交换机器重量的和。例如:3 2 1,交换1 3后为递增排序,总的交换代价为4。给出N台机器的重量,求将所有机器变为有序的最小代价。(机器的重量均为正整数) Input 第1行:1个数N,表示机器及房间的数量。(2 <= N <= 5000

riba2534的博客 943

Jenkins Job DSL:用代码管理CI/CD配置的实践指南

Jenkins 是持续集成(CI)领域的经典开源平台,其核心价值在于自动化构建与交付流程。然而传统 UI 配置方式导致配置不可版本化、难以复现、审计困难,严重制约团队规模化协作效率。Job DSL 作为一种声明式配置即代码(IaC)方案,通过 Groovy 脚本驱动 Jenkins 内部 API,实现 Job、View、Folder 等资源的程序化创建与维护,天然支持 Git 版本控制、权限审计与环境一致性保障。它不替代 Pipeline,而是与其协同构成‘流程定义’与‘基础设施定义’双轨体系,显著提升 C

weixin_33744141的博客 519

51nod – 1125 交换机器的最小代价(贪心)

有N台机器重量各不相等,现在要求把这些机器按照重量排序,重量从左到右依次递增。移动机器只能做交换操作,但交换机器要花费一定的费用,费用的大小就是交换机器重量的和。例如:3 2 1,交换1 3后为递增排序,总的交换代价为4。给出N台机器的重量,求将所有机器变为有序的最小代价。(机器的重量均为正整数) 很有意思的一个贪心,首先要交换的数肯定会形成一个或多个环,然后对于每个环有两种情况,一种是用环内的最小的跑,一种是把环外的最小的把环内的最小的换掉,用环外最小的跑一次再换回来,为啥要换掉里面最小的呢,因为用环外最

wulalalawu的博客 302

NX二次开发PK获取对象类型

PK_ENTITY_ask_class(),获取对象类型建议用这个函数,比较通用,包含所有对象类型,可以替代UF_MODL_ask_edge_type(),UF_MODL_ask_body_type(),UF_MODL_ask_face_type()等函数。

qq_39541524的博客 827

TI Sitara系列AM64x开发板(双核ARM Cortex-A53)软硬件规格书

创龙科技TL64x-EVM是一款基于TI Sitara系列AM64x双核ARM Cortex-A53 + 单/四核Cortex-R5F + 单核Cortex-M4F多核处理器设计的高性能评估板,由核心板和评估底板组成。评估板接口资源丰富,引出5x Ethernet(两路支持TSN)、2x CAN-FD、多路UART、多路DI/DO、GPMC、PCIe、USB等接口,板载WIFI模块,支持4G/5G模块、NVME硬盘,可选配外壳直接应用于工业现场,方便用户快速进行产品方案评估与技术预研。

创龙,嵌入式一体化解决方案商 727

51nod-1125 交换机器的最小代价

地址:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1125 思路:所有机器a[]保存下标由小到大排序,对于不在其正确位置的数就需要改变位置,那么肯定是从最小值开始交换,若最小值a1不在其正确位置,那么它肯定是占了别人的位置,因此与其交换,这样一直到a1也在其正确位置为止,这样一直都是a1在和别人交换,因此代价是最...

随风而行的博客 352

把慢点掰开看:在 SAP HANA 中启用 SQL 优化耗时跟踪 SqlOptTime 的实战指南

摘要:SAP HANA 性能排查中,常出现SQL查询时快时慢的现象,表面看似执行问题,实则是编译阶段耗时过长。通过SQL优化跟踪工具SqlOptStep和SqlOptTime,可精准区分编译与执行时间。SqlOptStep展示优化树变化过程,而SqlOptTime则记录各阶段耗时,帮助定位问题根源。启用SqlOptTime需配置traceprofile,建议限定特定用户以减少系统负载。实际案例显示,报表响应慢常由计算视图编译(CeQo)导致,而非执行阶段问题。解决方案包括调整计算视图展开方式或优化基础视图结

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1010

51nod 1125 交换机器的最小代价

1125 交换机器的最小代价 基准时间限制:1 秒 空间限制:131072 KB 分值: 80 难度:5级算法题 收藏 关注 有N台机器重量各不相等,现在要求把这些机器按照重量排序,重量从左到右依次递增。移动机器只能做交换操作,但交换机器要花费一定的费用,费用的大小就是交换机器重量的和。例如:3 2 1,交换1 3后为递增排序,总的交换代价为4。给出N台机器的重量,

哇咔咔 709

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

1125 交换机器的最小代价 51NOD

1125 交换机器的最小代价 基准时间限制:1 秒 空间限制:131072 KB 分值: 80 难度:5级算法题 有N台机器重量各不相等,现在要求把这些机器按照重量排序,重量从左到右依次递增。移动机器只能做交换操作,但交换机器要花费一定的费用,费用的大小就是交换机器重量的和。例如:3 2 1,交换1 3后为递增排序,总的交换代价为4。给出N台机器的重量,求将所有机器

张大帅的博客 459

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

51Nod 1125 交换机器的最小代价

题目描述: 有N台机器重量各不相等,现在要求把这些机器按照重量排序,重量从左到右依次递增。移动机器只能做交换操作,但交换机器要花费一定的费用,费用的大小就是交换机器重量的和。例如:3 2 1,交换1 3后为递增排序,总的交换代价为4。给出N台机器的重量,求将所有机器变为有序的最小代价。(机器的重量均为正整数) 解题报告: 1WA,1h20min 这题思路比较清晰,贪心思想:为了最小代价,...

weixin_30457065的博客 115

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

51Nod-1125-交换机器的最小代价

ACM模版描述题解看了这道题,标记着贪心算法,但是吭哧吭哧了好久也没有想到如何贪心才是最贪心的策略,每次总是感觉有纰漏,无法想到最全的策略。找了找大神的题解,茅厕顿开,真是自己太年轻了。找到一篇 say_c_box 的详细题解,打开了我的思维,着实不错。以下是其核心题解:那么针对每一个机器怎样交换的代价最小? 很容易想到要尽可能的使重量小的机器交换次数多,重量大的物品交换次数少。所以策略就是两种,我

逐梦者 1238

1125 交换机器的最小代价(贪心,环)

有N台机器重量各不相等,现在要求把这些机器按照重量排序,重量从左到右依次递增。移动机器只能做交换操作,但交换机器要花费一定的费用,费用的大小就是交换机器重量的和。例如:3 2 1,交换1 3后为递增排序,总的交换代价为4。给出N台机器的重量,求将所有机器变为有序的最小代价。(机器的重量均为正整数) 输入 第1行:1个数N,表示机器及房间的数量。(2 <= N <= 50000) 第2 ...

晚安( ̄o ̄) . z Z 345

51nod1125 交换机器的最小代价(贪心)

  1125 交换机器的最小代价 基准时间限制:1 秒 空间限制:131072 KB 分值: 80 难度:5级算法题  收藏    关注 有N台机器重量各不相等,现在要求把这些机器按照重量排序,重量从左到右依次递增。移动机器只能做交换操作,但交换机器要花费一定的费用,费用的大小就是交换机器重量的和。例如:3 2 1,交换1 3后为递增排序,总的交换代价为4。给出N台机器的重量,求将所有...

知与谁i的博客 488

[贪心 置换] 51Nod 1125 交换机器的最小代价

先找置换 肯定会形成循环 如果问最小交换次数 就是n-循环数 这里问最小代价 先分成很多组置换,因为是两两交换,所以在每组置换内部,让最小的数反向走一圈,也就是 最小数交换 置换长度-1 次,其他数交换一次.还有一种可能,是引入置换外部的最小数,也就是先交换内部最小数和外部最小数,再按第一种方法搞,最后再换回来. #include #include #include

雯舞 695

51nod 1125 交换机器的最小代价 (贪心 公式)

贪心算法 修改 隐藏话题 1125 交换机器的最小代价 基准时间限制:1 秒 空间限制:131072 KB 分值: 80 难度:5级算法题  收藏  关注 有N台机器重量各不相等,现在要求把这些机器按照重量排序,重量从左到右依次递增。移动机器只能做交换操作,但交换机器要花费一定的费用,费用的大小就是交换机器重量的和

Panda!!!!!! 343

51 nod 1125 交换机器的最小代价(强连通分量+贪心)

1125 交换机器的最小代价 基准时间限制:1 秒 空间限制:131072 KB 分值: 80 难度:5级算法题  收藏  关注 有N台机器重量各不相等,现在要求把这些机器按照重量排序,重量从左到右依次递增。移动机器只能做交换操作,但交换机器要花费一定的费用,费用的大小就是交换机器重量的和。例如:3 2 1,交换1 3后为递增排序,总的交换代价为

MR CODER 310
上一篇: 《致橡树》 舒婷
下一篇: STL常用方法
也道长
博客等级 码龄9年 11粉丝 52原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值