51NOD 1125(交换机器最小代价) (贪心) 思想 !思想!
题目链接: https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1125
第1行:1个数N,表示机器及房间的数量。(2 <= N <= 50000) 第2 - N + 1行:每行1个数,表示机器的重量Wi。(1 <= Wi <= 10^9)
输出最小代价。
3 3 2 1
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
转载于:https://www.cnblogs.com/sizaif/p/9078532.html
51NOD 1125(交换机器最小代价) (贪心) 思想 !思想!相关推荐
- 分金问题 返回分割的最小代价 (贪心算法)
一块金条切成两半,是需要花费和长度数值一样的铜板 比如长度为20的金条,不管怎么切都要花费20个铜板,一群人想整分整块金条,怎么分最省铜板? 例如,给定数组{10,20,30},代表一共三个人,整块金 ...
- 贪心算法-分金问题,返回分割最小代价(java)
分金问题 分金问题 解题思路 代码演示 递归解法 贪心算法专题 分金问题 一块金条切成两半,是需要花费和长度数值一样的铜板 比如长度为20的金条,不管怎么切都要花费20个铜板,一群人想整分整块金条,怎 ...
- SPH算法(求最小代价树)
一.sph算法简介 1.最小代价树算法 SPH算法也叫做MPH( minimum path heuristic)算法, 用于构造时延约束最算法小代价组播树. 该算法中每 个目的结点通过与当前组播树有最 ...
- 贪心算法思想详解+示例代码
CSDN话题挑战赛第2期 参赛话题:学习笔记 文章目录 五大算法思想 贪心算法 举例说明 选择排序 删除数字 寻找数字最大和 买股票 最大回文字符串 背包问题 小结 五大算法思想 分治思想 贪心算法/ ...
- 51nod 1270 数组的最大代价
1270 数组的最大代价 题目来源: HackerRank 基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题 数组A包含N个元素A1, A2......AN.数组B包 ...
- 最小代价生成树Prim/Kruskal(c/c++)
常用的求最小代价生成树的方法有两种:Prim算法和Kruskal算法,这两种算法都是贪心算法的应用, Prim算法 在一个无向带权图中求得最小生成树得思路是:从a顶点出发,将a放入u集合(表示已选), ...
- SSL 1460——最小代价问题
Description 设有一个n×m(小于100)的方格(如图所示),在方格中去掉某些点,方格中的数字代表距离(为小于100的数,如果为0表示去掉的点),试找出一条从A(左上角)到B(右下角)的路径 ...
- [Swust OJ 404]--最小代价树(动态规划)
题目链接:http://acm.swust.edu.cn/problem/code/745255/ Time limit(ms): 1000 Memory limit(kb): 65535 Descr ...
- 【NOIP2015模拟10.22】最小代价
Description 给出一幅由n个点m条边构成的无向带权图. 其中有些点是黑点,其他点是白点. 现在每个白点都要与他距离最近的黑点通过最短路连接(如果有很多个黑点,可以选取其中任意一个),我们想要 ...
最新文章
- 关于Entity Framework自动关联查询与自动关联更新导航属性对应的实体注意事项说明...
- avcodec_receive_packet 11
- Js传递数组参数到后台controller的方式
- 俄罗斯议会下院通过“老大哥”反恐法
- 【机器学习】SVM理论与python实践系列
- AGC008D K-th K
- 互联网架构:屡试不爽的架构三马车
- 信息系统项目管理04——项目整体管理
- lambda函数if_Lambda函数用法总结
- 单链表尾指针要置为空?为什么单链表建立完以后,比如p指向尾节点,要加上一句p-next=NULL;?
- mbedtls | 02 - 伪随机数生成器(ctr_drbg)的配置与使用
- clion 产生sigabrt_OpenNERO Ubuntu:进程结束,退出代码134(被信号6:SIGABRT中断)
- 简单js模仿浏览器crtl+f功能
- 闻与MyBatis之MyBatis快速指南
- this.className的使用
- 如何更好的思考和学习
- [C++STL教程]7.priority_queue优先队列入门学习!零基础都能听懂的教程
- 北京星美影院等五家企业因拒收现金被央行警告处罚
- 传真故障排除示例--传真CED信号断续导致传真失败
- 根据城市名字获取经纬度
热门文章
- lr模型和dnn模型_建立ML或DNN模型的技巧
- 解构里面再次解构_解构后的咖啡:焙炒,研磨和分层,以获得更浓的意式浓缩咖啡
- pytorch机器学习_机器学习— PyTorch
- 如何在代码中将menu隐藏_如何在40行代码中将机器学习用于光学/光子学应用
- 数据科学与大数据排名思考题_排名前5位的数据科学课程
- 如果华为自主的操作系统,对消费者和华为会有什么影响?
- Pygame 使用Djkstra广度搜索寻找迷宫(相对)最短路径
- linux 命令下删除字符,【Linux基础】tr命令替换和删除字符
- python为什么虚部是j不是i_Python基础02 基本数据类型
- python参数类型_Python 参数类型和参数匹配模型