bzoj 1697: [Usaco2007 Feb]Cow Sorting牛排序(置换)
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
Sample Output
题意:长度为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牛排序(置换)相关推荐
- 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 ...
- BZOJ 1631: [Usaco2007 Feb]Cow Party【最短路】
1631: [Usaco2007 Feb]Cow Party [题目描述] 传送门 题解 正向建边,从X开始刷一趟SPFA,然后反向建边,从X刷一趟SPFA,最后两次的答案加和就可以了. 代码如下 # ...
- bzoj 1638: [Usaco2007 Mar]Cow Traffic 奶牛交通(拓扑排序?+DP)
1638: [Usaco2007 Mar]Cow Traffic 奶牛交通 Time Limit: 5 Sec Memory Limit: 64 MB Submit: 971 Solved: 37 ...
- bzoj 1698: [Usaco2007 Feb]Lilypad Pond 荷叶池塘(BFS)
1698: [Usaco2007 Feb]Lilypad Pond 荷叶池塘 Time Limit: 5 Sec Memory Limit: 64 MB Submit: 550 Solved: 1 ...
- 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 ...
- 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 ...
- P5200 [USACO19JAN]Sleepy Cow Sorting 牛客假日团队赛6 D 迷路的牛 (贪心)
链接:https://ac.nowcoder.com/acm/contest/993/E 来源:牛客网 对牛排序 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言 ...
- bzoj 1641: [Usaco2007 Nov]Cow Hurdles 奶牛跨栏(floyd)
1641: [Usaco2007 Nov]Cow Hurdles 奶牛跨栏 Time Limit: 5 Sec Memory Limit: 64 MB Submit: 715 Solved: 47 ...
- 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 ...
最新文章
- linux虚拟终端快捷键
- 大学生有必要学python吗_大学生学python到底有没有用?
- IT接口——Micro USB带来的市场影响力
- pxe自动部署Linux,Kickstart+PXE自动部署CentOS6.6
- 混淆矩阵(TP+FN+FP+TN)
- python可以下载百度文库_用python下载百度文库的代码
- 用户和计算机硬盘系统的接口,硬盘接口类型,教您怎么看硬盘接口的类型
- WEB渗透测试之三大漏扫神器
- 高分影视盒子app下载一起学技巧_大家学APP课程你学习了吗?
- 终于搞清楚了:happen-before原则是干什么的
- “三权分立”模型之角色模型
- 玩转控件DTPicker
- 丁总路由器设置以及401联网
- Elasticsearch _search查询参数及过滤
- 毕业论文管理系统类图
- ios文件连接 百度网盘服务器,iOS系统教程:iphone怎么解压百度网盘文件
- 商务邮箱是什么怎么注册?邮箱客服电话
- BT种子和BitTorrent协议
- Oracle全局临时表
- 插入排序法(Java实现)
热门文章
- python教程视频哪个好-python视频教程哪家好
- python怎么读写文件-Python 文件I/O
- python简单程序实例-python实现的简单窗口倒计时界面实例
- 零基础适合学python吗-零基础,经济学专业,适合自学Python吗?
- 用python画多来a梦-python3里tkinter中canvas(画板)案例之哆啦A梦
- 专科python应届生工资多少-应届生学Python年薪30万,秘诀是什么?
- php和python-Python与PHP的一些区别
- 语音识别(LSTM+CTC)
- 听了那么多语音识别,你知道它的发展史吗?
- android 动画x轴旋转,android – 动画在视图之间转换,在z轴上旋转...