zoukankan      html  css  js  c++  java
  • 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$。

  • 相关阅读:
    package.json 笔记
    TypeScript 笔记
    RxJS 笔记
    angular 使用Redux
    ngrx 笔记
    Node 的使用
    imoocLinux环境变量配置文件笔记
    imooc正则表达式学习笔记
    js定时器和linux命令locate
    linux修改PATH环境
  • 原文地址:https://www.cnblogs.com/Serene-shixinyi/p/8081548.html
Copyright © 2011-2022 走看看