题目网址: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; //数字
int n; //初始位置
bool visit;
}p[];
bool cmp(const A &a,const A &b)
{
return a.v<b.v;
}
int main(){
int n,m,i,j,Min,Max,Mmin,x,y,t,sum,ans2,ans1,ans,num;
while (~scanf("%d",&n))
{
for (i=;i<=n;i++)
{
scanf("%d",&p[i].v);
p[i].n=i;
p[i].visit=;
}
sort(p+,p+n+,cmp);
Min = p[].v;
Max = p[n].v; //最小数的初始位置,最大数的初始位置
ans = ; //总和
for (i=;i<=n;i++)
{
Mmin = Max*;
sum = ;
t = i;
num = ;
while (p[t].visit==) //找到一个环
{
num ++; //构成环的数的数量
sum += p[t].v;
Mmin = min(Mmin,p[t].v); //找到这个环里初始位置最靠前的位置
p[t].visit = ; //标记
t = p[t].n;
}
if (num > )
{
ans1 = sum + (num-)*Mmin;
ans2 = sum + Mmin + (num+)*Min;
ans += min(ans1,ans2);
}
}
printf("%d\n",ans);
}
return ;
}

详解:http://www.cnblogs.com/xin-hua/archive/2013/07/29/3222651.html

另在HDU,也有一道类似的题,但是它限制了,只有相邻的两个数才能交换。

网址:http://acm.hdu.edu.cn/showproblem.php?pid=2838

树状数组做

31 ms

 #include <cstdio>
#include <iostream>
#include <cstring>
using namespace std;
const int N=,maxn=;
int ccnt[N];
__int64 csum[N]; //在自己之前比自己小的数
int lowbit(int x)
{
return x&(-x);
}
int main()
{
int n,x;
while (~scanf("%d",&n))
{
memset(ccnt,,sizeof(ccnt));
memset(csum,,sizeof(csum));
int scnt=;
__int64 ssum=,ans=;
while (n--)
{
scanf("%d",&x);
scnt++; ssum+=x;
for(int i=x;i<=maxn;i+=lowbit(i))
ccnt[i]++, csum[i]+=x; //更新csum[i]的值,ccnt[i]为csum[i]的子的个数
int cnt=;
__int64 sum=;
for(int i=x;i>;i-=lowbit(i))
cnt+=ccnt[i], sum+=csum[i]; //sum在x之前比x小的数的和,在x之前比x小的数的个数
ans+=ssum-sum+(__int64)x*(scnt-cnt);
}
printf("%I64d\n",ans);
}
return ;
}

Cow Sorting POJ 3270 & HDU 2838的更多相关文章

  1. hdu 2838 Cow Sorting(树状数组)

    Cow Sorting Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Tota ...

  2. Cow Sorting hdu 2838

    Cow Sorting Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  3. hdu 2838 Cow Sorting (树状数组)

    Cow Sorting Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  4. hdu 2838 Cow Sorting 树状数组求所有比x小的数的个数

    Cow Sorting Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  5. HDU Cow Sorting (树状数组)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2838 Cow Sorting Problem Description Sherlock's N (1  ...

  6. POJ 2104&HDU 2665 Kth number(主席树入门+离散化)

    K-th Number Time Limit: 20000MS   Memory Limit: 65536K Total Submissions: 50247   Accepted: 17101 Ca ...

  7. poj 3270(置换群)

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

  8. BZOJ1697: [Usaco2007 Feb]Cow Sorting牛排序

    1697: [Usaco2007 Feb]Cow Sorting牛排序 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 387  Solved: 215[S ...

  9. Cow Sorting(置换群)

    Cow Sorting Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 6664   Accepted: 2602 Descr ...

随机推荐

  1. JAVA接口和抽象类的特点

    接口的特点: 1:接口不可实例化,可结合多态进行使用(接口 对象=new 对象()) 2:接口里的成员属性全部是以 public(公开).static(静态).final(最终) 修饰符修饰 3:接口 ...

  2. swoole多进程处理产生的问题

    以前用swoole的时候,没有涉及到数据库连接,碰到问题没有那么多,后来公司业务原生来写swoole多进程,问题出现很多 1.多进程之间会产生进程隔离,global无效,不能共用一个mysql,red ...

  3. oozie timezone时区配置

    cloudera oozie默认时区是UTC,在开发oozie任务时必须在期望执行的时间上减去8小时,很不习惯.记录下修改时区的配置操作. 1. cloudera oozie配置—>Oozie ...

  4. c++ isdigit函数

    函数名:isdigit 函数所需头文件:#include<cstdio> 函数格式:isdigit(字符) 函数作用:判断括号内是否为1~9的数字. 例:isdigit(4) 就是true ...

  5. 263 Ugly Number 丑数

    编写程序判断给定的数是否为丑数.丑数就是只包含质因子 2, 3, 5 的正整数.例如, 6, 8 是丑数,而 14 不是,因为它包含了另外一个质因子 7.注意:    1 也可以被当做丑数.    输 ...

  6. T-SQL编程以及常用函数

    1.索引添加索引,设计界面,在任何一列前右键--索引/键--点击进入添加某一列为索引 2.视图 视图就是我们查询出来的虚拟表创建视图:create view 视图名 as SQL查询语句,分组,排序, ...

  7. SQL server 查询语句 练习题

    用SQL语句创建四个表: create database tongjigouse tongjigocreate table student(Sno varchar(20) not null prima ...

  8. Canvas入门笔记-实现极简画笔

    今天学习了Html5 Canvas入门,已经有大神写得很详细了http://www.cnblogs.com/tim-li/archive/2012/08/06/2580252.html#8 在学习过后 ...

  9. 类函数:string、math

    类:系统内置的处理字符串类型的函数方法类. string是String的快捷方式.所包含的内容都是一样的. Int i=x.length;//获取一个字符串长度 字符串中,索引号从0开始 String ...

  10. elastic-job 的简单使用

    说明:这个是使用2.1.5版本 elastic-job是当当开源的的的定时任务,使用也是很简单的,可以解决数据量的大的时候可以分片执行,多应用节点部署时候不会重复执行. 是通过zookeeper作为控 ...