51 nod 1125 交换机器的最小代价(强连通分量+贪心)
来源:互联网 发布:双肩包淘宝网 编辑:程序博客网 时间:2024/06/05 04:40
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
解:好好的一个数学题,却是用图论来解。。。
很明显,第一想法就是重量大的交换次数少,重量小的交换次数大。
每一个数如果不在排完序后自己的位置的话 那么一定可以和其他的数形成环(想一想就知道)
那么就很简单了 用这个数作为中间桥梁来使其他的数归位
但是还有一种情况要考虑 就是用不在这个环中的最小的数作为中间桥梁来换。。。(太细节了。。。)
#include<iostream>#include<algorithm>#include<cstdio>#include<cstdlib>#include<cstring>#include<vector>#include<map>#include <set>#include <bits/stdc++.h>using namespace std;const int N = 1e5+10;typedef long long LL;typedef pair<int,int>pi;const LL mod = 1e9+7;unordered_map<LL,int>q,st;struct node{ LL v; int id;}p[N];LL least;int cmp(node A,node B){ return A.v<B.v;}int vis[N];LL solve(int i){ LL mint=p[i].v; LL ans=p[i].v; int j=p[i].id; if(i==j) return 0; LL cnt=0; vis[i]=1; while(i!=j) { vis[j]=1; ans+=p[j].v; j=p[j].id; cnt++; } return ans+min(mint*(cnt-1),least*(cnt+2)+mint);}int main(){ int n; q.clear(); scanf("%d", &n); for(int i=0;i<n;i++) { scanf("%lld", &p[i].v); p[i].id=i; } sort(p,p+n,cmp); least=p[0].v; memset(vis,0,sizeof(vis)); LL sum=0; for(int i=0;i<n;i++) { if(vis[i]) continue; sum+=solve(i); } printf("%lld\n",sum); return 0;}
阅读全文
0 0
- 51 nod 1125 交换机器的最小代价(强连通分量+贪心)
- 51nod 1125[交换机器的最小代价]【贪心】
- 51NOD 1125(交换机器最小代价) (贪心) 思想 !思想!
- 51nod 1125 机器交换最小代价(贪心)
- 51nod 1125 交换机器的最小代价 (贪心 公式)
- 51nod 1125 交换机器的最小代价
- 51nod 1125 交换机器的最小代价
- 51Nod-1125-交换机器的最小代价
- 1125 交换机器的最小代价 51NOD
- 51Nod 1125 交换机器的最小代价
- 【置换群】51Nod 1125交换机器的最小代价
- 51NOD1125交换机器的最小代价(贪心算法)
- 51nod1125 交换机器的最小代价(贪心)
- 1125 交换机器的最小代价
- 【51Nod1125】交换机器的最小代价
- HDOJ--1827--Summer Holiday(强连通分量的最小代价连接)
- 【置换群+贪心】51Nod1125[交换机器的最小代价]题解
- 【贪心】51Nod 1476 括号序列的最小代价
- yii 别名的定义和使用
- H
- 【推荐】-时间复杂度和空间复杂度计算
- Struts2 官方教程:动作配置(Action Configuration)
- Flask源码阅读
- 51 nod 1125 交换机器的最小代价(强连通分量+贪心)
- 欢迎使用CSDN-markdown编辑器
- iptables简介
- linux网络socket套接字介绍
- Java String 声明、引用、内存分配深度剖析
- TYVJ-P1035 棋盘覆盖
- Mac 下安装与配置 nginx php7.1
- 网络编程
- JavaWeb(JSTL标签库学习笔记)