Cow Sorting
Time Limit: 2000MS   Memory Limit: 65536K
Total Submissions: 7587   Accepted: 2982

Description

Farmer John's N (1 ≤ N ≤ 10,000) cows are lined up to be milked in the evening. Each cow has a unique "grumpiness" level in the range 1...100,000. Since grumpy cows are more likely to damage FJ's milking equipment, FJ would like to reorder the cows in line so they are lined up in increasing order of grumpiness. During this process, the places of any two cows (not necessarily adjacent) can be interchanged. Since grumpy cows are harder to move, it takes FJ a total of X+Y units of time to exchange two cows whose grumpiness levels are X and Y.

Please help FJ calculate the minimal time required to reorder the cows.

Input

Line 1: A single integer: N
Lines 2..N+1: Each line contains a single integer: line i+1 describes the grumpiness of cow i

Output

Line 1: A single line with the minimal time required to reorder the cows in increasing order of grumpiness.

Sample Input

3
2
3
1

Sample Output

7

Hint

2 3 1 : Initial order. 
2 1 3 : After interchanging cows with grumpiness 3 and 1 (time=1+3=4). 
1 2 3 : After interchanging cows with grumpiness 1 and 2 (time=2+1=3).
/*
* @Author: LyuC
* @Date:   2017-10-12 15:55:54
* @Last Modified by:   LyuC
* @Last Modified time: 2017-10-12 16:52:18
*/
/*题意:给你一个无序的序列,让你只能两两进行交换,使得序列有序,每次操作的代价是两个数的和问你最少的代价是多少思路:置换+贪心例子 :原始序列:1 8 9 7 6排序下标:1 4 5 3 2那么我们发现,位置不对的8 9 7 6实际上是一个置换:4->3->5->2->4长度为4最少需要交换三次才能使得序列有序,保证了次数最少了,然后就是考虑怎么交换才能代价最小,置换(4,3,5,2)可以拆成(2,4),(2,3),(2,5),这样就保证了部分交换代价是最小的,但是这个例子就是个特例,如果首先将1 6 进行交换使得(4,3,5,1)在一个置换里,交换完再用6把1交换出去,这样的代价更小,所以这个有两种最优操作,处理的时候取两者更右者;
*/
#include <iostream>
#include <stdio.h>
#include <vector>
#include <string.h>
#include <algorithm>#define MAXN 10005
#define INF 0x3f3f3f3fusing namespace std;struct Node{int val;int index;int sortindex;
}a[MAXN];
int n;
bool vis[MAXN];
vector<int>v[MAXN];
int pos;
int minnum;bool cmp1(Node a,Node b){return a.val<b.val;
}bool cmp2(Node a,Node b){return a.index<b.index;
}void init(){for(int i=0;i<MAXN;i++)v[i].clear();pos=0;minnum=INF;memset(vis,false,sizeof vis);
}int main(){// freopen("in.txt","r",stdin);while(scanf("%d",&n)!=EOF){init();for(int i=1;i<=n;i++){scanf("%d",&a[i].val);a[i].index=i;minnum=min(minnum,a[i].val);}sort(a+1,a+n+1,cmp1);for(int i=1;i<=n;i++){a[i].sortindex=i;}sort(a+1,a+n+1,cmp2);for(int i=1;i<=n;i++){if(vis[i]==true)continue;int x=i;vis[i]=true;v[pos].push_back(a[i].sortindex);x=a[x].sortindex;while(x!=i){if(vis[x]==true){break;}v[pos].push_back(a[x].sortindex);vis[x]=true;x=a[x].sortindex;}if(a[x].sortindex==a[i].sortindex){pos++;}else{v[pos].clear();v[pos].push_back(i);int End=x;x=i;vis[x]=false;while(x!=End){x=a[x].sortindex;vis[x]=false;}vis[i]=true;pos++;}}sort(a+1,a+n+1,cmp1);int res=0,ra,rb;for(int i=0;i<pos;i++){sort(v[i].begin(),v[i].end());ra=0;for(int j=1;j<(int)v[i].size();j++){ra+=(a[v[i][0]].val+a[v[i][j]].val);}if(minnum!=a[v[i][0]].val){rb=0;for(int j=1;j<(int)v[i].size();j++){rb+=(minnum+a[v[i][j]].val);}rb+=2*(minnum+a[v[i][0]].val);}else{rb=INF;}res+=min(ra,rb);}printf("%d\n",res);}return 0;
}

转载于:https://www.cnblogs.com/wuwangchuxin0924/p/7656934.html

poj3270Cow Sorting(置换+贪心)相关推荐

  1. poj3270 Cow Sorting 置换环+贪心

    Cow Sorting Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 7455   Accepted: 2926 Descr ...

  2. CodeForces - 1481E Sorting Books(贪心+dp)

    题目链接:点击查看 题目大意:给出一个长度为 nnn 的序列,每次操作可以将任意一本书放到序列的末尾,问最少需要操作多少次,才能使得相同的数字挨在一起 题目分析:不难看出,对每个位置的数都操作一次,是 ...

  3. 树状数组之POJ3270Cow Sorting

    Cow Sorting(http://poj.org/problem?id=3270) Time Limit: 2000MS Memory Limit: 65536K Total Submission ...

  4. 操作系统面试题(史上最全、持续更新)

    尼恩面试宝典专题40:操作系统面试题(史上最全.持续更新) 本文版本说明:V28 <尼恩面试宝典>升级规划为: 后续基本上,每一个月,都会发布一次,最新版本,可以联系构师尼恩获取, 发送 ...

  5. Codeforces Round #699 (Div. 2) E.Sorting Books(贪心+DP / 线段树)超高质量题解,看不懂来打我 ~

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 E - Sorting Books 一排书架上有 nnn 本书排成一排,每本书上有一个颜色 aia_i ...

  6. 2021年度训练联盟热身训练赛第五场 H题In-place Sorting+贪心构造

    题意: 给你n个小于101810^{18}1018的大数,问在可以再不改变序列位置,之改变数值中某数位的'9'变为'6'或将'6'变为'9',求的最终序列由小到大,且字典序最小. 题目: 链接:htt ...

  7. bzoj 1697: [Usaco2007 Feb]Cow Sorting牛排序(置换)

    1697: [Usaco2007 Feb]Cow Sorting牛排序 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 706  Solved: 413 ...

  8. codeforces1481 E. Sorting Books(贪心+dp)

    大佬题解1 大佬题解2 E. Sorting Books 首先每本书都移动,移动次数是n能够满足题意.如果某些书不用移动,说明把隔开他们中间的书全部抽走后自然成组. 对于每本书全部移动的情况,显然我们 ...

  9. P5200 [USACO19JAN]Sleepy Cow Sorting 牛客假日团队赛6 D 迷路的牛 (贪心)

    链接:https://ac.nowcoder.com/acm/contest/993/E 来源:牛客网 对牛排序 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言 ...

最新文章

  1. 基于图像到UV Map映射的3D手部高保真重建网络(ICCV2021)
  2. 昆虫大脑帮助AI解决导航难题
  3. python3 pyinstaller 打包后执行文件运行错误 No such file or directory 和 Cannot load native module 解决方法
  4. 机器学习(五) 关于散点图生成
  5. 面试题16: 数值的整数次方
  6. Python学习之GUI--SQL数据库连接
  7. 谈谈如何利用 valgrind 排查内存错误
  8. 这个女人,败得很漂亮!看后有感!
  9. Javascript 笔记与总结(2-3)Javascript 运算符、控制结构与对象操作
  10. Java 数组与容器之间的转化 实现数组动态赋值
  11. opengl双三次bezier曲面_OpenGL复杂物体建模
  12. Vim编辑器快速上手
  13. 怎么把分开的pdf放在一起_两个合并到一起的pdf怎么拆分?
  14. 访问不了共享文件夹提示“网络错误“的解决方法
  15. 汽车电器设备与维修【1】
  16. cpu亲和力总结taskset和setcpu及其他相关
  17. stm32学习笔记---STM32F4知识
  18. 阿里云大数据组件的基本介绍
  19. java之xml进阶教程——使用castor框架
  20. Python中Django与Echarts的结合用法

热门文章

  1. php ctr b,用PHP解密AES CTR Little Endian
  2. 广播风暴原理,成因及解决办法(个人整理)
  3. 选择IDC机房的心得
  4. LTE:3GPP向4G发展的核心技术
  5. springcloud微服务航班查询系统
  6. error: invalid application of 'sizeof' to an incomplete type 'JNINativeMethod []'
  7. 微信小打卡,微信小打卡上打卡方法,被微信推荐的打卡小程序CSS margin(外边距)
  8. django对比数据并调用企业微信接口群发
  9. 2010/12/19英语单词背诵
  10. 黑客是如何攻击目标电脑的