1697: [Usaco2007 Feb]Cow Sorting牛排序

Time Limit: 5 Sec  Memory Limit: 64 MB
Submit: 706  Solved: 413
[Submit][Status][Discuss]

Description

农夫JOHN准备把他的 N(1 <= N <= 10,000)头牛排队以便于行动。因为脾气大的牛有可能会捣乱,JOHN想把牛按脾气的大小排序。每一头牛的脾气都是一个在1到100,000之间的整数并且没有两头牛的脾气值相同。在排序过程中,JOHN 可以交换任意两头牛的位置。因为脾气大的牛不好移动,JOHN需要X+Y秒来交换脾气值为X和Y的两头牛。 请帮JOHN计算把所有牛排好序的最短时间。

Input

第1行: 一个数, N。

第2~N+1行: 每行一个数,第i+1行是第i头牛的脾气值。

Output

第1行: 一个数,把所有牛排好序的最短时间。

Sample Input

3
2
3
1

Sample Output

7

题意:长度为n的序列,通过不停交换两个数使之有序,每次花费为交换的两个数之和,求最小花费

思路:

①将原序列排序找出所有的置换环,例如:

原序列:2 3 4 1 6 5

排序后:1 2 3 4 5 6

这个序列可以找到两个单独的置换环{ {1, 2, 3, 4} {5, 6} }

②假设置换环长度为t,很显然对于每个置换环要移动某个数字(t-1)次才可以让置换环中所有数字有序,所以一定是移动数值最小的那个!但是不一定,因为你可以先将那个最小的数和整个序列中最小的数交换,排完序后再换回来,这样有可能更优,所以对于每个置换环需要判断一下

#include<stdio.h>
#include<algorithm>
using namespace std;
typedef struct Cow
{int val;int id;bool operator < (const Cow &b) const{if(val<b.val)return 1;return 0;}
}Cow;
Cow s[10005];
int flag[10005];
int main(void)
{int n, i, now, sum, ans, cnt;scanf("%d", &n);for(i=1;i<=n;i++){scanf("%d", &s[i].val);s[i].id = i;}sort(s+1, s+n+1);ans = 0;for(i=1;i<=n;i++){if(flag[i])continue;now = i;cnt = sum = 0;while(flag[now]==0){sum += s[now].val;cnt++;flag[now] = 1;now = s[now].id;}sum -= s[i].val;ans += min(s[i].val*(cnt-1)+sum, s[1].val*(cnt-1)+sum+2*(s[1].val+s[i].val));}printf("%d\n", ans);return 0;
}

bzoj 1697: [Usaco2007 Feb]Cow Sorting牛排序(置换)相关推荐

  1. poj 3268 bzoj 1631: [Usaco2007 Feb]Cow Party(最短路)

    1631: [Usaco2007 Feb]Cow Party Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 855  Solved: 613 [Subm ...

  2. BZOJ 1631: [Usaco2007 Feb]Cow Party【最短路】

    1631: [Usaco2007 Feb]Cow Party [题目描述] 传送门 题解 正向建边,从X开始刷一趟SPFA,然后反向建边,从X刷一趟SPFA,最后两次的答案加和就可以了. 代码如下 # ...

  3. bzoj 1638: [Usaco2007 Mar]Cow Traffic 奶牛交通(拓扑排序?+DP)

    1638: [Usaco2007 Mar]Cow Traffic 奶牛交通 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 971  Solved: 37 ...

  4. bzoj 1698: [Usaco2007 Feb]Lilypad Pond 荷叶池塘(BFS)

    1698: [Usaco2007 Feb]Lilypad Pond 荷叶池塘 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 550  Solved: 1 ...

  5. bzoj 1696: [Usaco2007 Feb]Building A New Barn新牛舍

    1696: [Usaco2007 Feb]Building A New Barn新牛舍 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 481  Solv ...

  6. bzoj 1632: [Usaco2007 Feb]Lilypad Pond(BFS)

    1632: [Usaco2007 Feb]Lilypad Pond Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 688  Solved: 230 [S ...

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

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

  8. bzoj 1641: [Usaco2007 Nov]Cow Hurdles 奶牛跨栏(floyd)

    1641: [Usaco2007 Nov]Cow Hurdles 奶牛跨栏 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 715  Solved: 47 ...

  9. bzoj 1633: [Usaco2007 Feb]The Cow Lexicon 牛的词典【dp】

    预处理出g[i][j]表示原串第i个匹配第j个单词需要去掉几个字母(匹配不上为-1) 设f[i]为i及之后满足条件要去掉的最少字母 倒着dp! f[i]初始为f[i+1]+1,转移方程为f[i]=mi ...

最新文章

  1. linux虚拟终端快捷键
  2. 大学生有必要学python吗_大学生学python到底有没有用?
  3. IT接口——Micro USB带来的市场影响力
  4. pxe自动部署Linux,Kickstart+PXE自动部署CentOS6.6
  5. 混淆矩阵(TP+FN+FP+TN)
  6. python可以下载百度文库_用python下载百度文库的代码
  7. 用户和计算机硬盘系统的接口,硬盘接口类型,教您怎么看硬盘接口的类型
  8. WEB渗透测试之三大漏扫神器
  9. 高分影视盒子app下载一起学技巧_大家学APP课程你学习了吗?
  10. 终于搞清楚了:happen-before原则是干什么的
  11. “三权分立”模型之角色模型
  12. 玩转控件DTPicker
  13. 丁总路由器设置以及401联网
  14. Elasticsearch _search查询参数及过滤
  15. 毕业论文管理系统类图
  16. ios文件连接 百度网盘服务器,iOS系统教程:iphone怎么解压百度网盘文件
  17. 商务邮箱是什么怎么注册?邮箱客服电话
  18. BT种子和BitTorrent协议
  19. Oracle全局临时表
  20. 插入排序法(Java实现)

热门文章

  1. python教程视频哪个好-python视频教程哪家好
  2. python怎么读写文件-Python 文件I/O
  3. python简单程序实例-python实现的简单窗口倒计时界面实例
  4. 零基础适合学python吗-零基础,经济学专业,适合自学Python吗?
  5. 用python画多来a梦-python3里tkinter中canvas(画板)案例之哆啦A梦
  6. 专科python应届生工资多少-应届生学Python年薪30万,秘诀是什么?
  7. php和python-Python与PHP的一些区别
  8. 语音识别(LSTM+CTC)
  9. 听了那么多语音识别,你知道它的发展史吗?
  10. android 动画x轴旋转,android – 动画在视图之间转换,在z轴上旋转...