Cow Sorting POJ 3270 & HDU 2838
题目网址: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的更多相关文章
- hdu 2838 Cow Sorting(树状数组)
		Cow Sorting Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tota ... 
- Cow Sorting   hdu  2838
		Cow Sorting Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ... 
- hdu 2838 Cow Sorting (树状数组)
		Cow Sorting Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ... 
- hdu 2838 Cow Sorting  树状数组求所有比x小的数的个数
		Cow Sorting Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ... 
- HDU Cow Sorting (树状数组)
		题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2838 Cow Sorting Problem Description Sherlock's N (1 ... 
- POJ 2104&HDU 2665 Kth number(主席树入门+离散化)
		K-th Number Time Limit: 20000MS Memory Limit: 65536K Total Submissions: 50247 Accepted: 17101 Ca ... 
- poj 3270(置换群)
		题意:给定n头母牛的脾气大小,然后让你通过交换任意两头母牛的位置使得最后的母牛序列的脾气值从小到大,交换两头母牛的代价是两个脾气之和,使得代价最小. 分析:以前做过一道题,只有一个地方和这道题不同,但 ... 
- BZOJ1697: [Usaco2007 Feb]Cow Sorting牛排序
		1697: [Usaco2007 Feb]Cow Sorting牛排序 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 387 Solved: 215[S ... 
- Cow Sorting(置换群)
		Cow Sorting Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 6664 Accepted: 2602 Descr ... 
随机推荐
- bzoj 4300: 绝世好题【dp】
			设f[i][j]表示数列到i为止最后一项第j位为1的最大子序列长度,每次从i-1中1<<j&a[i]!=0的位+1转移来 然后i维是不需要的,答案直接在dp过程中去max即可 #i ... 
- bzoj 1684: [Usaco2005 Oct]Close Encounter【数学(?)】
			枚举分母,然后离他最近的分子只有两个,分别判断一下能不能用来更新答案即可 #include<iostream> #include<cstdio> #include<cma ... 
- uva 11292 The Dragon of Loowater(贪心)
			题目大意: 你的王国里有一条n个头的恶龙,你希望雇一些骑士把它杀死(即砍掉所有头).村里有m个骑士可以雇佣,一个能力值为x的骑士可以砍掉恶龙一个直径不超过x的头,且需要支付x个金币.如何雇佣骑士才 ... 
- tomcat8的session共享实现方案
			tomcat8的session共享实现 下载tomcat 版本:apache-tomcat-8.0.53.zip 实现步骤,只需要两步 两个tomcat的server.xml都增加一样cluster配 ... 
- 洛谷 P3378 【模板】堆(小根堆)
			题目描述 如题,初始小根堆为空,我们需要支持以下3种操作: 操作1: 1 x 表示将x插入到堆中 操作2: 2 输出该小根堆内的最小数 操作3: 3 删除该小根堆内的最小数 输入输出格式 输入格式: ... 
- 前端javascript 错误 Uncaught SyntaxError: Unexpected token ILLEGAL
			前端控制台报Uncaught SyntaxError: Unexpected token ILLEGAL 错误时,就是非法字符错误,首先检查符号是否正确,不要出现中文标点! 然后检查参数之类的类型是否 ... 
- 二分搜索 POJ 3273 Monthly Expense
			题目传送门 /* 题意:分成m个集合,使最大的集合值(求和)最小 二分搜索:二分集合大小,判断能否有m个集合. */ #include <cstdio> #include <algo ... 
- Scala-基础-数组(1)
			import junit.framework.TestCase import scala.collection.mutable.ArrayBuffer; //数组(1) //知识点-定义数组,变长数组 ... 
- 逻辑回归(Logistic Regression)推导
			出自BYRans博客:http://www.cnblogs.com/BYRans/ 本文主要讲解分类问题中的逻辑回归.逻辑回归是一个二分类问题. 二分类问题 二分类问题是指预测的y值只有两个取值(0或 ... 
- 如何快速排查解决Android中的内存泄露问题
			概述 内存泄露是Android开发中比较常见的问题,一旦发生会导致大量内存空间得不到释放,可用内存急剧减少,导致运行卡顿,部分功能不可用甚至引发应用crash.对于复杂度比较高.多人协同开发的项目来讲 ... 
