最小成本排序:两个数交换,这两个数相加,一组数全部交换成有序之后,累加和就是成本。

如何求出最小的成本,有一点难度,主要在于有两种情况的分析,一种是每个元素交换到正确位置(会形成一些闭合的圆),进行计算;另外一种是需要在圆外借元素(最小的那个元素),这样的成本才是最小的。所以求最小的成本就是两种情况最小的即可!

公式1:

公式2:   (其中x就是输入的最小数)

#include<stdio.h>
#include<iostream>
#include<algorithm>
using namespace std;
static const int MAX=1000;
static const int VMAX=10000;int n,A[MAX],B[MAX],T[VMAX+1];
int x;//整个输入最小的元素int solve()
{int MinCost=0;//最小成本bool flag[MAX];for(int i=0; i<n; i++){B[i]=A[i];flag[i]=false;}sort(B,B+n);//升序排列(默认)for(int i=0;i<n;i++){T[B[i]]=i;}//保存元素所在的正确位置for(int i=0;i<n;i++){if(flag[i]){continue;}int cur=i;int S=0;//求和int m=VMAX;//每个圆内最小的元素int an=0;//每个圆内元素的个数while(1){flag[cur]=true;an++;int v=A[cur];//圆内的数值S+=v;//求和m=min(m,v);cur=T[v];//圆内数值所在索引值if(flag[cur]){break;}//遍历完一个圆圈,跳出}//MinCost+=S+(an-2)*m;//MinCost+=S+m+(an+1)*x;MinCost+=min(S+(an-2)*m,S+m+(an+1)*x);//计算“不借元素”和“借最小元素”两种情况,取成本小的一方}return MinCost;
}
int main()
{cout<<"数组长度:";cin>>n;x=VMAX;for(int i=0;i<n;i++){cin>>A[i];x=min(x,A[i]);}int result=solve();cout<<result;return 0;
}

最小成本排序:两种情况相关推荐

  1. 进一步封装axios并调用其读取数据(吐槽~在安卓9.0以下或者IOS10.X以下手机端H5页面不支持,在这两种情况下的系统只能使用ajax或者原生js请求后台数据)

    注意!!!(修改于2020年7月18日) 在安卓9.0以下或者IOS10.X以下手机端H5页面不支持,在这两种情况下的系统只能使用ajax或者原生js请求后台数据 报错截图如下 报错内容: {&quo ...

  2. bartender外部表不是预期格式_批量合并Excel数据时“外部表不是预期格式”或“文件包含损坏数据”的两种情况...

    很多朋友在用Power Query合并(汇总)Excel数据时,碰到过"DataFormat.Error:外部表不是预期格式"或"DataFormat.Error:文件包 ...

  3. 【数字信号处理】周期延拓 ( 周期延拓的两种情况 | L ≥ N | L ≤ N )

    文章目录 一.周期延拓 二.周期延拓分两种情况 一.周期延拓 非周期的信号 通过 周期延拓 可以变为 周期信号 ; 周期延拓 : 非周期序列 构成 周期序列 的过程 ; 非周期序列 x(n)[0,N− ...

  4. 在origin 2018中同时画两个图,带errorbar和不带errorbar两种情况

    在origin 2018中同时画两个图,带errorbar和不带errorbar两种情况 在一个图层里同时画两幅图 两幅图坐标可不一致 ①在当前图层中,选中图层左上角的 1 标志 ②右键 1 →图层内 ...

  5. delete不调用析构函数的两种情况

    1. 所使用的类为预定义类 下面这段函数代码编译运行时没有问题的,不需要CPtr的定义 ---PtrUser.h class CPtr; // 预定义 class CPtrUser { public: ...

  6. Verilog HDL中容易生成锁存器的两种情况

    在Verilog HDL的程序设计中,有两种情况会生成锁存器. 第一种情况 在always块中使用if语句,但是没有else,这会导致当条件不成立时,没有其他语句可执行,使得被赋值的寄存器一直保持不变 ...

  7. 修改db2管理服务器,创建DB2管理服务器的两种情况

    DB2管理服务器在创建时分为创建一个和创建多个两种情况,下面就为您详细介绍这两种创建DB2管理服务器的情况,供您参考学习. 一.创建DB2管理服务器(只能创建一个) 1.首先创建管理服务组用户(可不建 ...

  8. MySQL笔记-解决...mysql.sock (13)(两种情况会产生此问题)

    遇到这个mysql.sock(13)一般是两种情况. 一个是mysql.sock权限不够,最少要个775权限: chmod -R 775 /var/lib/mysql/ 如果嫌烦的话赋予777就可以了 ...

  9. java项目打jar包的两种情况

    java项目打jar包的两种情况 本文介绍一下java项目打jar包时的两种情况各怎么操作 方法/步骤 1.  1 一.java项目没有导入第三方jar包 这时候打包就比较简单: 1.  首先在Ecl ...

最新文章

  1. 利用JNI技术在Android中调用C++代码
  2. 本月Github热门开源项目排行榜...
  3. 零基础可以学python吗-对于几乎是零基础的人,直接学 Python 编程合适吗?
  4. Java机器学习库ML之三Sampling(采样)
  5. Python学习札记(二) python3.5安装 + (假装是)第一个Python程序
  6. 重启大法好!线上常见问题排查手册
  7. Android开发之SDK开发获取资源id报错的问题
  8. Failed to import pydot
  9. 关于Office 中的墨迹功能(可作word电子签名)
  10. 笔记 | 机器学习《概率图模型》,手推笔记已186页!
  11. 魔兽怀旧服服务器位置,魔兽世界怀旧服PDD在哪个服务器 魔兽世界怀旧服pdd去哪个区...
  12. [译] 海量视频时代下的内容发现之旅
  13. SpringBoot18:集成SpringSecurity
  14. 2020及2021年常被利用的30个软件漏洞
  15. python-编码实现趋势外推法
  16. Mac os删除自带ABC输入法,只保留搜狗输入法
  17. windows7浏览器无法打开html,Win7系统chrome浏览器无法打开怎么回事?Win7系统chrome浏览器无法打开的解决方法...
  18. 减法公式运算法则_小学数学加减乘除计算运算法则
  19. IBM 3650 M3阵列在bios中的WebBios的设置
  20. 郑南宁院士会议演讲——直觉性AI与无人驾驶(上)

热门文章

  1. maven00----maven学习说明
  2. 51nod 1046 A^B Mod C
  3. kafka + storm 错误 Async loop died
  4. Solr4:加入中文分词IKAnalyzer2012 FF
  5. 优雅的closesocket
  6. axios的介绍与页面配置---axios工作笔记003
  7. Elasticsearch--进阶-match_phrase短语匹配---全文检索引擎ElasticSearch工作笔记012
  8. jsp 如何自定义标签
  9. 可以用来做ppt的网页效果
  10. 常用linux网络配置命令