您的位置:首页 > 其它

poj 3270 Cow Sorting

2014-05-29 18:45 155 查看
http://poj.org/problem?id=3270

这道题就是给你一个无序序列转换成有序序列需要花费的代价最小,交换a和b代价为a+b;

#include <cstdio>
#include <cstring>
#include <algorithm>
#define maxn 20000
using namespace std;

int min1=100000;
int n;
bool vis[maxn];
struct node
{
int num;
int id;
bool operator <(const node &a)const
{
return num<a.num;
}
}p[maxn*2];

int deal()
{
int ans=0;
for(int i=0; i<n; i++)
{
if(!vis[i])
{
vis[i]=true;
int sum=p[i].num;
int m1=p[i].num;
int t1=1;
int id=p[i].id;
while(id!=i)
{
vis[id]=true;
sum+=p[id].num;
m1=min(m1,p[id].num);
id=p[id].id;
t1++;
}
ans+=min(sum+(t1-2)*m1,sum+m1+(t1+1)*min1);
}
}
return ans;
}

int main()
{
while(scanf("%d",&n)!=EOF)
{
memset(vis,false,sizeof(vis));
for(int i=0; i<n; i++)
{
scanf("%d",&p[i].num);
p[i].id=i;
min1=min(min1,p[i].num);
}
sort(p,p+n);
printf("%d\n",deal());
}
return 0;
}


View Code
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: