1.确定初始和目标状态。

明确。目标状态的排序状态。

2.得出置换群,。比如,数字是8 4 5 3 2 7,目标状态是2 3 4 5 7 8。能写为两个循环:(8 2 7)(4 3 5)。

3.观察当中一个循环,明显地。要使交换代价最小,应该用循环里面最小的数字2。去与另外的两个数字。7与8交换。

这样交换的代价是:

sum - min + (len - 1) * min

化简后为:

sum + (len - 2) * min

当中,sum为这个循环全部数字的和,len为长度,min为这个环里面最小的数字。

4.考虑到第二种情况,我们能够从别的循环里面调一个数字,进入这个循环之中。使交换代价更小。比如初始状态:1 8 9 7 6

可分解为两个循环:(1)(8 6 9 7),明显。第二个循环为(8 6 9 7),最小的数字为6。

我们能够抽调整个数列最小的数字1进入这个循环。使第二个循环变为:(8 1 9 7)。

让这个1完毕任务后,再和6交换。让6又一次回到循环之后。

这样做的代价明显是:

sum + min + (len + 1) * smallest

当中,sum为这个循环全部数字的和。len为长度,min为这个环里面最小的数字,smallest是整个数列最小的数字。

5.因此,对一个循环的排序,其代价是sum - min + (len - 1) * min和sum + min + (len + 1) * smallest之中小的那个数字。但这里两个公式还不知道怎么推出来的。

6.我们在计算循环的时候,不须要记录这个循环的全部元素,仅仅须要记录这个循环的最小的数及其和。

7.在储存数目的时候,我们能够使用一个hash结构。将元素及其位置相应起来,以达到知道元素,能够高速反查元素位置的目的。这样就不必要一个个去搜索。

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn = 10010; int a[maxn],b[maxn],dir[100005];
int vis[maxn];
int main()
{
int n;
while(scanf("%d",&n) != EOF){
for(int i = 0; i < n; i++){
scanf("%d",&a[i]);
b[i] = a[i];
dir[a[i]] = i;
}
sort(b,b+n);
memset(vis,0,sizeof(vis));
int ans = 0;
for(int i = 0; i < n; i++){
if(!vis[i]){
vis[i] = 1;
int id = i,start = a[i];
int len = 1,min_ = a[i],sum = a[i]; ///找出置换的循环;
while(1){
if(b[id] == start) break;
sum += b[id];
len ++;
min_ = min(min_,b[id]);
id = dir[b[id]];
vis[id] = 1;
} ///求出在当前这个循环中的最小花费;
int tmp = min(min_*(len-1) + sum-min_, b[0]*(len+1) + sum + min_);
ans += tmp;
} }
printf("%d\n",ans);
}
return 0;
}

poj 3270 更换使用的更多相关文章

  1. Cow Sorting POJ 3270 & HDU 2838

    题目网址:http://poj.org/problem?id=3270 题目大意是:一串无序的数字,要排成增序的数列,可以交换不相邻的数,每交换两个数,sum+这两个数,使得sum最小,求最小的sum ...

  2. poj 3270 置换

    poj 置换的应用 黑书原题P248 /** 题意: 给定序列, 将其按升序排列, 每次交换的代价是两个数之和, 问代价最小是多少 思路:1.对于同一个循环节之内的,肯定是最小的与别的交换代价最小 2 ...

  3. POJ 3270 Cow Sorting(置换群)

    题目链接 很早之前就看过这题,思路题把,确实挺难想的,黑书248页有讲解. #include <cstdio> #include <cstring> #include < ...

  4. POJ 3270 【组合数学】

    题意: 给长度为N的学列,然后让你通过置换来使其递增.原序列没有相同的数字. 1 ≤ N ≤ 10,000 ai<=100000 思路: 先找到循环,然后根据贪心只有两种比较好的情况,让循环里边 ...

  5. poj 3270(置换群)

    题意:给定n头母牛的脾气大小,然后让你通过交换任意两头母牛的位置使得最后的母牛序列的脾气值从小到大,交换两头母牛的代价是两个脾气之和,使得代价最小. 分析:以前做过一道题,只有一个地方和这道题不同,但 ...

  6. POJ 3270 Cow Sorting(置换群)

    题目链接 题意 : N头牛,每个牛的坏脾气都有一个值,每个值都不相同,把这个值按照从小到大排序,如果两个值交换,那么会花掉这两个值之和的时间,让你花最少的时间将每个值从小到大排好序,求最小的总时间. ...

  7. poj 3270 Cow Sorting

    思路:仔细读题,看到FARMER是两两交换牛的顺序进行排序的话,应该就往置换上靠拢,而这个题果然是置换的应用(有的解题报告上说是置换群,其实这只是单个置换,不用让它构成群).我们来将这些无序的牛抽象成 ...

  8. poj 3270 Cow Sorting (置换入门)

    题意:给你一个无序数列,让你两两交换将其排成一个非递减的序列,每次交换的花费交换的两个数之和,问你最小的花费 思路:首先了解一下什么是置换,置换即定义S = {1,...,n}到其自身的一个双射函数f ...

  9. poj 3270(置换群+贪心)

    Cow Sorting Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 6993   Accepted: 2754 Descr ...

随机推荐

  1. JSP 网页格式判定执行哪一块html

    JSP 网页格式判定执行哪一块html <!-- start -->             <td height="166" colspan="3&q ...

  2. jquery mobile左右滑动切换页面

    jquery mobile左右滑动切换页面 $(function() {$("body").bind('swiperight', function() {  $.mobile.ch ...

  3. linux-0.11抠代码-bootsect

    //bootfun.s .global asm_message .global asm_memmove .global asm_readsector .global asm_checkLBA .cod ...

  4. Spring Tool Suite(简称STS)针对SimpleDateFormat.pase函数的实参值不做检验,异常直接默认值之

    Spring Tool Suite(简称STS)是 Spring 团队开发的一款基于Eclipse的IDE,旨在简化开发Spring MVC 应用的流程.可以自动生成spring相关的配置文件.比如a ...

  5. java绘图板

    JAVA绘图板 import java.awt.BasicStroke; import java.awt.BorderLayout; import java.awt.Button; import ja ...

  6. ASP.NET - 使用MqSql数据库

    1. 首先需要安装mysql, 脚本之家下载地址: http://www.jb51.net/softs/2193.html 或者去mysql.com官网都可以,一路next,安装好后,有个简单配置,提 ...

  7. 代码格式化工具Astyle配置

    Astyle是一个很好的代码格式化工具,其他不多说,下面介绍一下我在VS 2010的配置 1. http://sourceforge.net/projects/astyle,这是该插件的网站,下载后把 ...

  8. KaOS 2016.04 发布,桌面 Linux 发行版

    KaOS 2016.04 发布了,KaOS是一份桌面Linux发行,其特色在于最新版本的KDE桌面环境及其他流行的使用Qt工具包的软件程序.它最初基于Arch Linux,但从2013年四月起,开发者 ...

  9. App开发所要注意的几个法务问题(转)

    GameLook 报道/ 移动应用市场的飞速发展催生出大量揭竿而起的开发者,同时许多矛盾也渐渐明显起来.其中涉及“抄袭”的问题尤为突出,毫不客气地说对于那些有底子的游戏厂商来说,法务已经成为团队中的一 ...

  10. hdu1114

    完全背包的水题,不过今天才学动态规划,就这样啦……hahahah!!! 完全背包跟普通背包的区别是普通背包从后往前循环,以防止被替换 完全背包是从前往后循环,后面的状态会跟着之前状态的改变而改变…… ...