思路:好吧,这是一道水题。。(这样说是不是太不好了?)主要就是求逆序对数,即 i<j 而 a[i]>a[j]的总个数
记得算法导论里分治法排序那部分有提到逆序对问题。本来打算用分治法的,发现这题规模比较小,而且按照白书的安排,好像暂时不需要这样的算法~结果直接O(n2)的算法就过了~
Code:
#include<stdio.h>
#define N 55
int num[N];
int main()
{
int n;
int el;
scanf("%d",&n);
while(n-->0)
{
scanf("%d",&el);
for(int i=0;i<el;++i)
scanf("%d",&num[i]);
int cnt=0;
for(int i=0;i<el;++i)
for(int j=i+1;j<el;++j)
{
if(num[i]>num[j])
cnt++;
}
printf("Optimal train swapping takes %d swaps.\n",cnt);
}//while
return 0;
}
原文:http://blog.csdn.net/buxizhizhou530/article/details/21130479