CodeVS 2845 排序的代价
Description
给你一个数列使他递增,交换两个元素的代价为两个数的和,最小化代价.
Sol
置换群+离散化.
使一个数列恢复递增顺序,那么,他和他要到达的位置的数需要交换,这样就形成了一个置换.
对于一个有向圈的置换,我们可以证明它的最小代价就是这个有向圈中 最小元素*(有向圈的大小-1)+其他数的和-最小元素.
1个大小为n的有向环,至少会进行n-1次交换才能成为n个1元环
当 \(size=1,2\) 时,它显然成立.
当 \(size>2\) 时,每次交换1个元素会将圆圈拆成两个互不相交的置换,一直拆下去需要拆n-1次.
然后还有一个问题就是我们可以把一个最小的数拉过来进行交换,这样我们就需要的代价就是,用最小的和有向圈中最小的交换,再让最小的*(有向圈大小-1)
这样这道题就显而易见了,至于不是连续的,我们可以离散化.
Code
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
using namespace std; const int N = 1005; int n,cnt,ans,ca=1;
int r[N],a[N],b[N],c[N],v[N],s1;
int p[N][N],s[N],h[N]; inline int in(int x=0,char ch=getchar()){ while(ch>'9'||ch<'0') ch=getchar();
while(ch>='0'&&ch<='9') x=(x<<3)+(x<<1)+ch-'0',ch=getchar();return x; }
int main(){
while(~scanf("%d",&n)){
for(int i=1;i<=n;i++) r[i]=in();
cnt=ans=0;
s1=r[1];for(int i=1;i<=n;i++) if(r[i]<s1) s1=r[i];
for(int i=1;i<=n;i++) a[i]=r[i];
sort(a+1,a+n+1); for(int i=1;i<=n;i++) b[a[i]]=i;
for(int i=1;i<=n;i++) c[i]=b[r[i]]; // for(int i=1;i<=n;i++) printf("%d%c",a[i]," \n"[i==n]);
// for(int i=1;i<=n;i++) printf("%d%c",r[i]," \n"[i==n]);
// for(int i=1;i<=n;i++) printf("%d%c",b[i]," \n"[i==n]);
// for(int i=1;i<=n;i++) printf("%d%c",c[i]," \n"[i==n]); memset(v,0,sizeof(v)); for(int i=1,t;i<=n;i++) if(!v[i]){
t=i,++cnt,p[cnt][0]=0,s[cnt]=r[i],h[cnt]=0;
while(!v[t]) v[t]=1,p[cnt][++p[cnt][0]]=r[t],s[cnt]=min(s[cnt],r[t]),h[cnt]+=r[t],t=c[t];
} // for(int i=1;i<=cnt;i++) for(int j=0;j<=p[i][0];j++) printf("%d%c",p[i][j]," \n"[j==p[i][0]]); for(int i=1;i<=cnt;i++){
ans+=min(s[i]*(p[i][0]-1)+h[i]-s[i],s[i]*2+s1*2+s1*(p[i][0]-1)+h[i]-s[i]);
} if(!ans) break;
printf("Case %d: %d\n",ca++,ans);
}return 0;
}
CodeVS 2845 排序的代价的更多相关文章
- [wikioi 2845]排序的代价(置换群)
有一列数,要对其进行排序(升序).排序只能通过交换来实现.每次交换,可以选择这列数中的任意二个,交换他们的位置,并且交换的代价为二个数的和.排序的总代价是排序过程中所有交换代价之和.先要求计算,对于任 ...
- 记忆化搜索 codevs 2241 排序二叉树
codevs 2241 排序二叉树 ★ 输入文件:bstree.in 输出文件:bstree.out 简单对比时间限制:1 s 内存限制:128 MB [问题描述] 一个边长为n的正三 ...
- 【CodeVS 2845】排序的代价
http://codevs.cn/problem/2845/ 好难的题啊qwq 没想到把排好序的数组的第i位和原数组的第i位的值看成一个单射函数,这样这是一个长度为n的置换. 对于置换的其中一个循环, ...
- codevs 2241 排序二叉树
/* WTF 写了好久了 开始的时候题目读错了 建图建错了 搜索写的也不好 感觉会T 总之 第一次写的很low 贴一下吧 */ #include<iostream> #include< ...
- BZOJ1697: [Usaco2007 Feb]Cow Sorting牛排序
1697: [Usaco2007 Feb]Cow Sorting牛排序 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 387 Solved: 215[S ...
- 深度排序与alpha混合
原文: https://blogs.msdn.microsoft.com/shawnhar/2009/02/18/depth-sorting-alpha-blended-objects/ 翻译:李现民 ...
- 【转载】Alpha混合物体的深度排序
原文:Alpha混合物体的深度排序 先说个题外话, 本来我想解答一下最近Creators Club论坛上经常出现的一个问题, 意外的是在网上竟然找不到什么全面的答案.. 这是个有着复杂答案的简单问题: ...
- 深度排序与alpha混合 【转】
翻译:李现民 最后修改:2012-07-03 原文:Depth sorting alpha blended objects 先说个题外话,本来我想回答在 Creators Club论坛上的一个常见 ...
- 贪心+拓扑排序 AOJ 2456 Usoperanto
题目传送门 题意:给出一条链,比如x连到y,x一定要在y的左边,且代价是这条链经过的点的权值和,问如何排序使得代价最小 分析:类似拓扑排序,先把入度为0的点入队,把指向该点的所有点按照权值排序,保证这 ...
随机推荐
- 单个pdf提取测试
# -*- coding: utf-8 -*- """ Created on Wed Feb 3 09:32:22 2016 pdf单个文件提取测试 @author: A ...
- PHP_php.ini_说明详解
这个文件必须命名为''php.ini''并放置在httpd.conf中的PHPIniDir指令指定的目录中.最新版本的php.ini可以在下面两个位置查看:http://cvs.php.net/vie ...
- Deep Learning in a Nutshell: History and Training
Deep Learning in a Nutshell: History and Training This series of blog posts aims to provide an intui ...
- Unity Shader Lab
http://docs.unity3d.com/460/Documentation/Manual/SL-BuiltinValues.html http://docs.unity3d.com/Manua ...
- C/C++宏中#与##的讲解
http://www.cnblogs.com/morewindows/archive/2011/08/18/2144112.html
- 重写UILabler的sizeThatFits方法,需要触发两次才会有效果
#import "ViewController.h" @interface SpecialLabel:UILabel @end @implementation SpecialLab ...
- MySQL编译安装错误:No curses/termcap library found的解决方法
CentOS编译安装MySQL,./coonfigure时出现错误: checking for termcap functions library... configure: error: No cu ...
- php栈数据结构和括号匹配算法
栈,体现的是后进先出,即LIFO.队列,体现的是先进先出,即FIFO. 栈 array_pop() //尾出 array_push() //尾进 或 array_shift()//头进 array_u ...
- 清除SQL server2008 记住的用户名和密码
删除以下文件即可: C:\Users\%username%\AppData\Roaming\Microsoft\Microsoft SQL Server\100\Tools\Shell\SqlStud ...
- apt-get 与 yum的区别 (转)
一般来说著名的linux系统基本上分两大类:1.RedHat系列:Redhat.Centos.Fedora等2.Debian系列:Debian.Ubuntu等 RedHat 系列 1 常见的安装包格式 ...