51NOD 1125(交换机器最小代价) (贪心) 思想 !思想!
来源:互联网 发布:验证码注册软件 编辑:程序博客网 时间:2024/05/22 12:13
题目链接: 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示例
3321
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
阅读全文
0 0
- 51NOD 1125(交换机器最小代价) (贪心) 思想 !思想!
- 51nod 1125 机器交换最小代价(贪心)
- 51nod 1125[交换机器的最小代价]【贪心】
- 51 nod 1125 交换机器的最小代价(强连通分量+贪心)
- 51nod 1125 交换机器的最小代价 (贪心 公式)
- 51nod 1125 交换机器的最小代价
- 51nod 1125 交换机器的最小代价
- 51Nod-1125-交换机器的最小代价
- 1125 交换机器的最小代价 51NOD
- 51Nod 1125 交换机器的最小代价
- 【置换群】51Nod 1125交换机器的最小代价
- 51NOD1125交换机器的最小代价(贪心算法)
- 51nod1125 交换机器的最小代价(贪心)
- 1125 交换机器的最小代价
- 【51Nod1125】交换机器的最小代价
- 【置换群+贪心】51Nod1125[交换机器的最小代价]题解
- 【贪心】51Nod 1476 括号序列的最小代价
- 51nod 1476 括号序列的最小代价【贪心】【堆】
- 338. Counting Bits
- Centos 7.0下运行yum,返回bash: yum: 未找到命令..
- Permission Denial: reading com.android.providers.media.MediaProvider uri content://media/external/i
- 决策树模型(1)
- lombok的使用和原理
- 51NOD 1125(交换机器最小代价) (贪心) 思想 !思想!
- SSH整合
- SpringMVC-Post/Get请求中文乱码问题
- springMVC入门实例 springMVC简单入门
- Myeclipse中断点调试和单步调试
- 机器学习基础——Anaconda环境
- 双硬盘,双显卡,Win10下安装Ubuntu16.04 64bit,GPT分区+UEFI
- Effective Java读书笔记二二(Java Tips.Day.22)
- 求知过程之Ajax表单提交