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


    有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

    一开始以为是一道贼难的题,然后稍微思考了一下发现是sb贪心。

    首先我们知道由于机器重量各不相等,所以每台机器最终的位置是确定的,

    那么我们肯定只需要把不在最终位置的机器交换。

    假如我们把一个机器现在的位置和最终的位置连一条有向边,那么最后这个图就会是由很多个联通块组成,并且每个联通块都是一个环。

    我们容易发现对于一个大小为n的环,我们需要交换n-1次,并且每个点都至少要和其他点交换一次。

    那么我们让代价最小(即重量最小)的那个交换n-1次(与其他所有点都交换一次),这样其他的点的代价都只有$W_i$,而中联最小的那个代价就是$(n-1) imes W_x$。

  • 相关阅读:
    CMSIS-SVD Reference
    CMSIS-SVD 系统视图说明
    Git 中文件的状态和流转区
    Windows下配置Git服务器和客户端
    gitignore / Delphi.gitignore
    gitignore : VisualStudio.gitignore
    使用 VS2012 开发 IDA GUI 插件 WIN32 SDK 和 内置函数 AskUsingForm_c
    stdafx.h是什么用处, stdafx.h、stdafx.cpp的作用
    [Win32]创建模态窗口
    Process ID, Process handle, Window handle
  • 原文地址:https://www.cnblogs.com/Serene-shixinyi/p/8081548.html
Copyright © 2020-2023  润新知