/*
zoj_1484
简单题,求最少逆序对,直接暴力过了,就懒得写归并排序啦~
*/
#include <iostream>
#include <cstdio>
#include <string.h>
#define N 5010
using namespace std;
int num[N*2];
int inv[N*2];
int main()
{
int n,i,j,sum,temp,sta;
while( scanf( "%d",&n )!=EOF )
{
memset( num,0,sizeof(num) );
memset( inv,0,sizeof(inv) );
for( i=0;i<n;i++ )
scanf( "%d",&num[i] ) , num[i+n]=num[i];
sum=0;
for( i=0;i<n;i++ )
{
for( j=i+1;j<n;j++ )
if( num[i]>num[j] )
inv[i]++;
sum+=inv[i];
}
for( j=1;j<=n-1;j++ )
{
temp=0;
for( i=j;i<j+n-1;i++ )
{
if( num[i]>num[j-1] )
inv[i]++;
temp+=inv[i];
}
if( sum>temp ) sum=temp;
}
printf( "%d\n",sum );
}
return 0;
}
zoj 1484 Minimum Inversion Number
最新推荐文章于 2014-08-09 15:12:05 发布