poj 3270 置换】的更多相关文章

poj 置换的应用 黑书原题P248 /** 题意: 给定序列, 将其按升序排列, 每次交换的代价是两个数之和, 问代价最小是多少 思路:1.对于同一个循环节之内的,肯定是最小的与别的交换代价最小 2. 对于整个序列中最小的与其交换 ,也可能最小 比较这两个大小,即可得出结论 对于情况1:代价为 sum+(len-2)*t //len 为每个循环节的长度, t 为每个循环节中最小的那个数 sum 为循环节中所 有数的和 对于情况2: 代价: sum+t+(len+1)*min // m为整个序列…
经典的题目,主要还是考思维,之前在想的时候只想到了在一个循环中,每次都用最小的来交换,结果忽略了一种情况,还可以选所有数中最小的来交换一个循环. Cow Sorting Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 6511   Accepted: 2532 Description Farmer John's N (1 ≤ N ≤ 10,000) cows are lined up to be milked in the…
题意:给你一个无序数列,让你两两交换将其排成一个非递减的序列,每次交换的花费交换的两个数之和,问你最小的花费 思路:首先了解一下什么是置换,置换即定义S = {1,...,n}到其自身的一个双射函数f.那么我们将其写为若干个不相交的循环的乘积形式(A1, A2, ... Ap1)(B1, B2, ... Bp2)... ...例如 数组   9 4 5 7 3 1 下标   1 2 3 4 5 6 排序后下标   6 3 4 5 2 1 让我们看下标 1->6->1 一个循环 (9 1) 2-…
题目网址:http://poj.org/problem?id=3270 题目大意是:一串无序的数字,要排成增序的数列,可以交换不相邻的数,每交换两个数,sum+这两个数,使得sum最小,求最小的sum. 0 ms #include<iostream> #include<stdio.h> #include<algorithm> #include<string.h> using namespace std; class A { public: int v; //…
题意: 给长度为N的学列,然后让你通过置换来使其递增.原序列没有相同的数字. 1 ≤ N ≤ 10,000 ai<=100000 思路: 先找到循环,然后根据贪心只有两种比较好的情况,让循环里边最小的数作为循环的起点,或者在循环外边找到最小的数作为置换的起点. 坑点: wa三次的原因是循环外的那个公式写错...因为最后还是要多换一次的... #include<stdio.h> #include<string.h> #include<algorithm> using…
题意:给定n头母牛的脾气大小,然后让你通过交换任意两头母牛的位置使得最后的母牛序列的脾气值从小到大,交换两头母牛的代价是两个脾气之和,使得代价最小. 分析:以前做过一道题,只有一个地方和这道题不同,但是实际意思确是天壤之别,这里是任意两头牛都可以交换,而以前那道题是只能交换相邻的.以前那道题是hdu 2838, 是一道求逆序数的题,树状数组解决之:当我看到这道题时,开始都没注意到这点,以为和以前做的那道题是一样的,后来才发现完全不一样!具体方法就是在数列中找置换环,每个环有两种处理方式,一种是用…
题目链接 题意 : N头牛,每个牛的坏脾气都有一个值,每个值都不相同,把这个值按照从小到大排序,如果两个值交换,那么会花掉这两个值之和的时间,让你花最少的时间将每个值从小到大排好序,求最小的总时间. 思路 : 这个在黑书上有写,就是置换群,248页有写.写的挺详细的.每个状态都可以分为若干个循环的乘积.对于任意循环 i ,设其长度为ki,则至少需要交换ki-1次,即每次让一个元素到达目标位置,而当第ki-1个元素到达目标以后显然第ki个也已经到达目标.第一个方法是让循环中最小的元素t参加所有的交…
思路:仔细读题,看到FARMER是两两交换牛的顺序进行排序的话,应该就往置换上靠拢,而这个题果然是置换的应用(有的解题报告上说是置换群,其实这只是单个置换,不用让它构成群).我们来将这些无序的牛抽象成一个置换,一次移动就是对一对元素置换.举个例子:       那么我们用置换环表示应该是(1 6 5)(2 3 4)这样两个3阶环,也就是说这六头牛是两个无序子序列,每个子序列内部按坐标排好序则整体有序,既然要使代价最小,我们就应该让置换的次数尽量少,置换的两个数和尽量小.根据上面的划分,我们知道在…
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为这个环里面…
Cow Sorting Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 6993   Accepted: 2754 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...…